|
學(xué)了一段時間單片機(jī),這兩天做了個實(shí)用電路,最長99分鐘定時倒計(jì)時提醒器。缺陷是電路開始工作后,一分鐘減一個數(shù)再無其它動作。給啟動按鈕加了聲音,否則電路是否已經(jīng)啟動都看不出來。時間到有響聲提醒。
IMG_20201107_173725.jpg (141.07 KB, 下載次數(shù): 52)
下載附件
2020-11-7 22:59 上傳
IMG_20201107_173712.jpg (132.72 KB, 下載次數(shù): 63)
下載附件
2020-11-7 23:00 上傳
上面兩個按鈕調(diào)節(jié)十分與分,每次加十分鐘和加一分鐘。
晶振下面是復(fù)位按鈕,右下角是啟動按鈕。
下面壓縮包中有Proteus仿真文件與C代碼。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (12.51 KB, 下載次數(shù): 62)
下載附件
2020-11-8 02:11 上傳
單片機(jī)源程序如下:
- #include<reg52.h> //自制最長99分鐘定時倒計(jì)時提醒器 2020-11-06
- #define uchar unsigned char
- #define uint unsigned int
- sbit gewei0=P2^6; //允許個位顯示。
- sbit shiwei0=P2^7; //允許十位顯示。
- sbit key1=P2^5; //鍵1,每按加10分鐘。
- sbit key2=P2^4; //鍵2,每按加1分鐘。
- sbit key3=P2^3; //鍵3,開倒計(jì)時或暫停。
- sbit beep=P2^2;
- uchar k;
- unsigned int s;
- void delayms(uchar);
- void delay(uint z);
- void keyscan();
- void display(uchar);
- void init();
- void xiang1();
- void xiang2();
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- void main()
- { init(); //調(diào)“初始化”。
- while(1)
- { keyscan(); //調(diào)“監(jiān)測按鍵”。
- display(k); //調(diào)“顯示”。
- }}
- void keyscan() //監(jiān)測按鍵。
- { if(key2==0)
- { delayms(26);
- if(key2==0)
- { k++;
- if(k>=99) //k==99與中斷那里一致。
- k=0;
- while(!key2); //抬起按鍵key2時,顯示出k+2的結(jié)果。
- }
- }
- if(key1==0)
- { delayms(26);
- if(key1==0)
- { k=k+10;
- if(k>=99) //k==99與中斷那里一致。
- k=0;
- while(!key1);
- }
- }
- if(key3==0)
- { delayms(26);
- if(key3==0)
- { xiang1(); //啟動“倒計(jì)時”提示。
- delayms(246);
- TR0=~TR0;
- while(!key3);
- }}}
- void delayms(uchar z) //延時。
- { uchar i,j;
- for(i=z;i>0;i--)
- for(j=110;j>0;j--); }
- void delay(uint z)
- { while(z--); }
- void display(uchar k) //顯示。
- { uchar shi,ge;
- shi=k/10;
- ge =k%10;
- gewei0=0;
- P0=table[ge];
- delayms(21);
- gewei0=1;
- shiwei0=0;
- P0=table[shi];
- delayms(21);
- shiwei0=1;
- }
- void init() //初始化。設(shè)置中斷與定時器的值。
- { TMOD=0x01;
- TH0=(65536-50000)/256; //晶振12MHz,定時50ms。
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- }
- void xiang1() //計(jì)時開始提示音。
- {
- uchar q;
- for(q=0;q<100;q++)
- {
- beep=0;
- delayms(6);
- beep=1;
- delayms(4);
- }
- delayms(64);
- }
- void xiang2() //計(jì)時結(jié)束提示音--嘟嘟。
- {
- unsigned int m;
- uchar n;
- for(n=0;n<2;n++)
- {
- for(n=0;n<111;n++)
- {
- beep=0;
- delay(107);
- beep=1;
- delay(107);
- }
- for(m=0;m<3456;m++);
- for(n=0;n<111;n++)
- {
- beep=0;
- delay(107);
- beep=1;
- delay(107);
- }
- for(m=0;m<33333;m++);
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
仿真文件與C代碼.rar
(17.21 KB, 下載次數(shù): 50)
2020-11-7 23:06 上傳
點(diǎn)擊文件名下載附件
5 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|