藍橋杯微控制器組 第七屆決賽模擬

2021-07-30 05:57:09 字數 4219 閱讀 5677

本程式有bug,在電壓測量模式與時間查詢模式下,按鍵使用不靈敏;在電壓測量模式下數碼管會閃。

使用的iic協議、ds1302協議在前文中有

0、很多很多的定義

#include #include "init.h"

#include "iic1.h"

#include "ds13021.h"

#define uchar unsigned char

#define vh_addr1 0x00

#define vh_addr2 0x01

#define vl_addr1 0x02

#define vl_addr2 0x03

#define h_addrh 0x04

#define m_addrh 0x05

#define s_addrh 0x06

#define h_addrl 0x07

#define m_addrl 0x08

#define s_addrl 0x09

void timer0init(void);

void timer1init(void); //1微秒@11.0592mhz

void pro_time();

void pro_set_time();

void pro_vo();

void pro_set_vo();

void pro_fr();

void pro_sea();

uchar vlh,vlm,vls,vhh,vhm,vhs;

uchar returnflag = 0;

uchar mode = 0;

uchar key = 0,key1 = 0;

uchar isrcount = 0;

uchar flag1s = 0;

int vh,vl;

uchar vh1,vh2,vl1,vl2;

uchar time1flag,flags;

uchar flagss;

1、主程式

void main()

} if(mode == 1)

if(mode == 2)

if(mode == 3)

if(mode == 4)

}}

2、設定時間功能

void pro_time()	}}

void pro_set_time()

else

dis[3] = init_time[1]/10;

dis[4] = init_time[1]%10;

dis[6] = init_time[2]/10;

dis[7] = init_time[2]%10;

} if(time_mode == 1)

else

dis[0] = init_time[0]/10;

dis[1] = init_time[0]%10;

dis[6] = init_time[2]/10;

dis[7] = init_time[2]%10;

} if(time_mode == 2)

else

dis[0] = init_time[0]/10;

dis[1] = init_time[0]%10;

dis[3] = init_time[1]/10;

dis[4] = init_time[1]%10;

} display();

key = keyscan();

if(key != 0)

else if(time_mode == 1)

else if(time_mode == 2)

break;

}//選擇

case 11:}

if(time_mode == 1)}

if(time_mode == 2)}

break;//+

} case 10:}

if(time_mode == 1)}

if(time_mode == 2)}

break;//-

}case 7: returnflag = 1; break;

default: key = 0; break;

}} if(returnflag == 1)

} }

3、測量電壓模式

uchar vo111;

int temp111;

void pro_vo()

if(temp111 >= vh)

if(temp111 <= vl)

dis[4] = temp111/1000;

dis[5] = temp111%1000/100;

dis[6] = temp111%100/10;

dis[7] = temp111%10;

display();

key = keyscan();

if(key != 0) }

}void pro_set_vo()

else

dis[4] = vl/1000;

dis[5] = vl%1000/100;

dis[6] = vl%100/10;

dis[7] = vl%10;

} if(vo_mode == 1)

else

dis[0] = vh/1000;

dis[1] = vh%1000/100;

dis[2] = vh%100/10;

dis[3] = vh%10;

} display();

key = keyscan();

if(key != 0)

else if(vo_mode == 1)

break;

}//選擇

case 11:}

if(vo_mode == 1)}

break;//+

} case 10:}

if(vo_mode == 1)}

break;//-

}case 6: returnflag = 1; break;

default: key = 0; break;

}} if(returnflag == 1)

}}

4、測量頻率模式

uchar ft_mode = 0;		//0 fr,1 time

void pro_fr()

else

} break;

}//time fr調整

case 7: mode = 1; break; //time

case 6: mode = 2; break; //vo

case 5: mode = 3; break; //fr

case 9: mode = 4; break; //sea

} }if(ft_mode == 0) }

if(ft_mode == 1)

} }

5、查詢模式

uchar sea_mode = 0;		//0 fr,1 time

void pro_sea()

else

else

else }}

}break;}//time fr調整

case 7: mode = 1; break; //time

case 6: mode = 2; break; //vo

case 5: mode = 3; break; //fr

case 9: mode = 4; break; //sea

} }if(sea_mode == 0)

if(sea_mode == 1)

if(sea_mode == 2)

if(sea_mode == 3)

}

6、配置程式及中斷

void timer1init(void)		//20毫秒@11.0592mhz

void timer0init(void)

void t1_isr() interrupt 3

if(isrcount >= 50)

else

} }void t0_isr() interrupt 1

藍橋杯 第七屆決賽 打靶

打靶 小明參加x星球的打靶比賽。比賽使用電子感應計分系統。其中有一局,小明得了96分。這局小明共打了6發子彈,沒有脫靶。但望遠鏡看過去,只有3個彈孔。顯然,有些子彈準確地穿過了前邊的彈孔。不同環數得分是這樣設定的 1,2,3,5,10,20,25,50 那麼小明的6發子彈得分都是多少呢?有哪些可能情...

第七屆藍橋杯決賽路徑之謎

路徑之謎 小明冒充x星球的騎士,進入了乙個奇怪的城堡。城堡裡邊什麼都沒有,只有方形石頭鋪成的地面。假設城堡地面是 n x n 個方格。如圖1.png 所示。按習俗,騎士要從西北角走到東南角。可以橫向或縱向移動,但不能斜著走,也不能跳躍。每走到乙個新方格,就要向正北方和正西方各射一箭。城堡的西牆和北牆...

藍橋杯 第七屆決賽 反幻方

反幻方 我國古籍很早就記載著 2 9 4 7 5 3 6 1 8 這是乙個三階幻方。每行每列以及對角線上的數字相加都相等。下面考慮乙個相反的問題。可不可以用 1 9 的數字填入九宮格。使得 每行每列每個對角線上的數字和都互不相等呢?這應該能做到。比如 9 1 2 8 4 3 7 5 6 你的任務是搜...