字符型LCD(16×2)顯示器,顯示格式為“TIME 分分:秒秒”。 ⑵ 用4個按鍵操作來設置當前想要倒計數的時間。 ⑶ 一旦按下鍵則開始倒計數,當計數為0時,發出一陣音樂聲。 ⑷ 程序執行后工作指示燈LCD閃動,表示程序開始執行,按下操作鍵K1~K4動作如下: ● K1---可調整倒計數的時間1~60分鐘。 ● K2---設置倒計數的時間為5分鐘,顯示“0500”。 ● K3---設置倒計數的時間為10分鐘,顯示“1000”。 ● K4--設置倒計數的時間為20分鐘,顯示“2000” ⑸ 復位后LCD的畫面應能顯示倒計時的分鐘和秒數,此時按K1鍵,則在LCD上顯示出設置畫面。此時,若: ● 按K2鍵---增加倒計數的時間1分鐘。 ● 按K2鍵---減少倒計數的時間1分鐘。 ● 按K4鍵---設置完成。
01.jpg (216.74 KB, 下載次數: 44)
下載附件
2021-12-5 23:58 上傳
51hei.png (157.3 KB, 下載次數: 48)
下載附件
2021-12-6 03:42 上傳
51hei.png (92.1 KB, 下載次數: 49)
下載附件
2021-12-6 03:42 上傳
單片機源程序如下: - #include<reg52.h>
- #include<intrins.h>
- #define time 100
- #define uint unsigned int
- #define uchar unsigned char
- uint t,flag,flag0,flag1,flag2,flag3,flag4,flag5,minute,second=60;
- uchar num,j,i,k=0;
- uchar code table[]="TIME 00:00";
- uint code table1[]={64580,64684,64777,64820,64898,64968,65030};
- sbit key1=P3^2;
- sbit key2=P3^3;
- sbit key3=P3^4;
- sbit key4=P3^5;
- sbit P1_5=P2^5;
- sbit RS=P2^0;
- sbit RW=P2^1;
- sbit E=P2^2;
- sbit led_red=P1^0;
- void write_time(uint addr,uint date);
- /////////延時函數///////
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- ///////延時1S////////////
- void delay1(void)
- {
- uchar a,b,c;
- for(c=13;c>0;c--)
- for(b=247;b>0;b--)
- for(a=142;a>0;a--);
-
- }
- ////////1602寫命令函數//////
- void write_com(uchar com)
- {
- RS=0;
- P0=com;
- delay(5);
- E=1;
- delay(10);
- E=0;
- }
- //////1602寫數據函數//////
- void write_date(uchar date)
- {
- RS=1;
- P0=date;
- delay(5);
- E=1;
- delay(10);
- E=0;
- }
- //////按鍵1處理函數///////
- void KEY1()
- {
- while(flag1)
- {
- if(key2==0)
- {
- delay(time);
- if(key2==0)
- {
- if(minute<=60)
- minute=minute+1;
- write_time(7,minute);
- }
- }
- if(key3==0)
- {
- delay(time);
- if(key3==0)
- {
- if(minute>0)
- minute=minute-1;
- write_time(7,minute);
- }
- }
- if(key4==0||key5==0)
- {
- delay(150);
- if(key4==0||key5==0)
- {
- flag1=0;
- flag =1;
- TR0=1;
- }
- }
- }
- }
- //////按鍵2處理函數//////
- void KEY2()
- {
- minute=5;
- write_time(7,minute);
- while(flag2)
- {
- if(key5==0)
- {
- delay(time);
- if(key5==0)
- {
- flag2=0;
- flag =1;
- TR0=1;
- }
- }
- }
- }
- //////按鍵3處理函數//////
- void KEY3()
- {
- minute=10;
- write_time(7,minute);
- while(flag3)
- {
- if(key5==0)
- {
- delay(time);
- if(key5==0)
- {
- flag3=0;
- flag =1;
- TR0=1;
- }
- }
- }
- }
- //////按鍵4處理函數//////
- void KEY4()
- {
- minute=20;
- write_time(7,minute);
- while(flag4)
- {
- if(key5==0)
- {
- delay(150);
- if(key5==0)
- {
- flag4=0;
- flag =1;
- TR0=1;
- }
- }
- }
- }
- void write_time(uint addr,uint date)
- {
- uint ge,shi;
- ge=date%10;
- shi=date/10;
- write_com(0x80+addr);
- write_date(0x30+shi);
- write_date(0x30+ge);
- if(addr==7&&date==0)
- j=1;
- if(j==1&&addr==10&&date==0)
- {
- flag0=1;
- TR0=0;
- TR1=1;
- flag5=1;
- }
-
- }
- //////初始化函數//////
- void init()
- {
- P1=0xff;
- RW=0;
- write_com(0x38);
- write_com(0x0c);
- write_com(0x06);
- write_com(0x80);
- TMOD=0x11;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TH1=0xfc;
- TL1=0x44;
- ET1=1;
- ET0=1;
- // TR1=1;
- // TR0=1;
- EA=1;
- flag0=1;
- for(num=0;num<12;num++)
- {
- write_date(table[num]);
- delay(20);
- }
- }
- void start()
- {
- if(key1==0)
- {
- delay(time);
- if(key1==0)
- {
- flag0=0;
- flag1=1;
- KEY1();
- }
- }
- if(key2==0)
- {
- delay(time);
- if(key2==0)
- {
- flag0=0;
- flag2=1;
- KEY2();
- }
- }
- if(key3==0)
- {
- delay(time);
- if(key3==0)
- {
- flag0=0;
- flag3=1;
- KEY3();
- }
- }
- if(key4==0)
- {
- delay(150);
- if(key4==0)
- {
- flag0=0;
- flag4=1;
- KEY4();
- }
- }
- }
- void write_time0()
- {
- minute=minute-1;
- write_time(7,minute);
- write_time(10,59);
- flag=0;
- }
- void counter()
- {
- if(t==20)
- {
- led_red=led_red^1;
- if(flag==1)
- write_time0();
- t=0;
- second=second-1;
- write_time(10,second);
- if(k==1&&second==59)
- {
- if(minute>0)
- minute=minute-1;
- write_time(7,minute);
- }
- if(second==0)
- {
- k=1;
- second=60;
- }
- }
- }
- int main()
- {
- init();
- while(1)
- {
- while(flag0)
- start();
- counter();
- while(flag5)
- {
- delay1();
- i++;
- if(i>7)
- i=0;
- }
- }
- return 0;
- }
- void inter0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- t++;
- }
- void initer1() interrupt 3
- {
- TH1=table1[i]/256;
- TL1=table1[i]%256;
- P1_5=~P1_5;
- if(key5==0)
- {
- delay(100);
- if(key5==0)
- {
- TR1=0;
- flag5=0;
- k=0;
- j=0;
- }
- }
- }
復制代碼
|