本程式有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 你的任務是搜...