標題: 單片機倒計時牌Proteus仿真圖+代碼 可倒計時24小時 [打印本頁]
作者: danpianji? 時間: 2019-3-10 15:42
標題: 單片機倒計時牌Proteus仿真圖+代碼 可倒計時24小時
“彼岸之光”倒計時牌設(shè)計書
一.設(shè)計構(gòu)想
⒈設(shè)計一個倒計時牌。
⒉倒計時牌由九個數(shù)碼管分別顯示“天”、“時”、“分”、“秒”,其中“天”為三位,“時”、“分”、“秒”各兩位。
⒊倒計時牌設(shè)置兩個按鍵:select/start鍵和set鍵,用來設(shè)置計時時間(只能設(shè)置整天)。當按select/start鍵時,“天”的百位、十位、個位依次閃爍,閃爍位表明當前位被選中,此時按set鍵進行調(diào)整。三位調(diào)整完畢再按下select/start鍵,倒計時開始。
二.實現(xiàn)方法
⒈定時器0工作在方式1(16位)下定時一秒,每秒觸發(fā)依次,使“秒”變量減一,相當于秒針。
⒉兩個按鍵:select/start鍵和set鍵分別使用兩個外部中斷INT0和INT1(設(shè)置下降沿有效)。當相應(yīng)的按鍵按下時,觸發(fā)相應(yīng)的中斷子程序。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

單片機源程序如下:
- #include <reg51.h>
- #include <stdio.h>
- void timer0_init(); //定時器0初始化
- void delay(int); //延時程序
- void trans_led(int,int,int,int); //數(shù)碼管顯示傳送函數(shù)
- sbit P10=0x90; //管腳定義
- sbit P30=0xB0;
- sbit P20=0xA0;
- int day=0,hour=0,min=0,sec=0; //定義時間變量
- unsigned int state=0; //運行狀態(tài)標志
- unsigned int asec=0; //記錄定時器0中斷次數(shù),當asec=20時計時為1s
- unsigned int check_b=0,check_s=0,check_g=0; //記錄set鍵的按下次數(shù)
- char table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //定義表格
- main(){
- timer0_init();
- EX0=1;
- EX1=1;
- IT0=1;
- IT1=1;
- EA=1;
- TR0=1;
- while(1){
- switch(state){
- case(1):trans_led(100,5,10,10); //"天"的百位閃爍
- break;
- case(2):trans_led(10,100,5,10); //"天"的十位閃爍
- break;
- case(3):trans_led(10,10,100,5); //"天"的個位閃爍
- break;
- default:trans_led(0,20,20,20); //正常運行
- break;
-
- }
- }
- }
- void timer0_init(){
- TMOD=0x21;
- TH0=0x3C;
- TL0=0xB0;
- ET0=1;
- TF0=0;
- }
- void Timer0_overflow() interrupt 1 using 0{
- TH0=0x3C;
- TL0=0xB0;
- asec++;
- if(asec==20){ //定時一秒
- asec=0;
- if(sec==0){
- sec+=60;
- min--;
- }
- if(min<0){
- min+=60;
- hour--;
- }
- if(hour<0){
- hour+=24;
- day--;
- }
- if(day>=0){ //計時時間未完,秒減一
- sec--;
- }
- else{
- day=hour=min=sec=0; //計時結(jié)束
- TR0=0;
- }
- }
- }
- void Int0() interrupt 0 using 0{ //set鍵
- if(state>4)
- state=1;
- else
- state++;
- if(state==4){
- state=0;
- TR0=1;
- }
- }
- void Int1() interrupt 2 using 0{ //select/start鍵
-
- if(state>=1&&state<=3){
- TR0=0;
- hour=min=sec=0;
- timer0_init();
- }
- switch(state){
- case(1):day+=100;
- check_b++;
- break;
- case(2):day+=10;
- check_s++;
- break;
- case(3):day++;
- check_g++;
- break;
- default:break;
- }
-
- if(check_b>9) //計時范圍限制
- day-=1000;
- if(check_s>9){
- day-=100;
- }
- if(check_g>9){
- day-=10;
- }
-
- }
- void delay(int time){
- int i,j;
- for(i=0;i<=time;i++){
- for(j=0;j<=10;j++);
- }
- }
- void trans_led(int a,int b,int c,int d){
- //顯示秒
- P2=0xFE;
- P1=table[sec%10];
- delay(20);
- P2=0xFF;
-
- P2=0xFD;
- P1=table[sec/10];
- delay(20);
- P2=0xFF;
-
- //顯示分
- P2=0xFB;
- P1=table[min%10];
- delay(20);
- P2=0xFF;
-
- P2=0xF7;
- P1=table[min/10];
- delay(20);
- P2=0xFF;
-
-
- //顯示時
- P2=0xEF;
- P1=table[hour%10];
- delay(20);
- P2=0xFF;
-
- P2=0xDF;
- P1=table[hour/10];
- delay(20);
-
-
-
- //顯示天
- delay(a);
- P2=0xFF;
- P30=0;
- check_b=day/100;
- P1=table[check_b];
- delay(b);
- P2=0xFF;
-
-
- P30=1;
- P2=0x7F;
- check_s=(day/10)%10;
- P1=table[check_s];
- delay(c);
- P2=0xFF;
-
- P2=0xBF;
- check_g=day%10;
- P1=table[check_g];
- delay(d);
- P2=0xFF;
-
-
-
- }
復(fù)制代碼 全部資料51hei下載地址:
倒計時牌.zip
(540.18 KB, 下載次數(shù): 137)
2019-3-10 15:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者: jovew 時間: 2020-4-26 21:12
值得學(xué)習(xí)的好東西。!
作者: Alexand 時間: 2020-6-8 10:16
膜拜大神
作者: ajian-1023 時間: 2020-10-19 11:33
大神,我只要時分秒的倒計時,怎么改
作者: lyd2004888 時間: 2023-9-1 14:47
值得學(xué)習(xí)的好東西!!
作者: unity134679 時間: 2024-5-21 11:11
值得學(xué)習(xí)的好東西!
作者: Sweetxy 時間: 2024-10-21 08:33
值得學(xué)習(xí)的好東西
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
婷婷综合久久
|
午夜电影福利
|
www.日本在线观看
|
九色在线
|
精品免费国产视频
|
国产婷婷综合
|
在线免费激情视频
|
japanhd成人
|
日韩欧美三区
|
在线一区观看
|
国产不卡一区在线观看
|
日韩亚洲视频
|
亚洲高清在线观看
|
一本岛道一二三不卡区
|
日本二区在线观看
|
伊人久久成人
|
午夜精品视频在线观看
|
精品国产网
|
久草日韩
|
日韩综合网
|
亚洲国产精品久久久久秋霞不卡
|
欧美黄色绿像
|
久久激情av
|
日本不卡一区
|
免费观看一级毛片
|
天堂久久久久久久
|
精品伊人|
古典武侠第一页久久777
|
欧美日韩精品国产
|
在线日韩不卡
|
欧美一区二区三区国产精品
|
国产高清视频
|
亚洲精品自在在线观看
|
黄免费观看视频
|
www国产亚洲精品久久网站
|
99精品一区二区三区
|
精品国产色
|
久久精品国产一区二区三区不卡
|
91tv在线观看
|
大伊人久久|
九九伦理片
|