|
51定時(shí)器時(shí)鐘及protues仿真
單片機(jī)源程序如下:
- /**************************************************************************************
- 實(shí)驗(yàn)現(xiàn)象:下載程序后,數(shù)碼管右3位顯示0,按K1鍵將數(shù)據(jù)寫入到EEPROM內(nèi)保存,
- 按K2鍵讀取EEPROM內(nèi)保存的數(shù)據(jù),按K3鍵顯示數(shù)據(jù)加1,按K4鍵顯示數(shù)據(jù)清零,
- 最大能寫入的數(shù)據(jù)是255。
- 注意事項(xiàng):
- ***************************************************************************************/
- #include "public.h"
- #include "24c02.h"
- #include "lcd1602.h"
- #include "stdio.h"
- #define EEPROM_ADDRESS 0 //定義數(shù)據(jù)存入EEPROM的起始地址
- sbit s1=P3^0;
- sbit s2=P3^1;
- sbit s3=P3^2;
- sbit beep=P2^3;
- u8 count,s1num;
- char miao,shi,fen;
- char code table[]=" 2008-9-30 MON";
- void di()
- {
- beep=0;
- delay_ms(100);
- beep=1;
- }
- void write_sfm(u8 add,u8 date)
- {
- u8 shi,ge;
- shi=date/10;
- ge=date%10;
- lcd1602_write_cmd(0x80+0x40+add);
- lcd1602_write_data(0x30+shi);
- lcd1602_write_data(0x30+ge);
- }
- void keyscan()
- {
- if(s1==0)
- {
- delay_ms(5);
- if(s1==0)
- {
- s1num++;
- while(!s1);
- di();
- if(s1num==1)
- {
- TR0=0;
- lcd1602_write_cmd(0x80+0x40+10);
- lcd1602_write_cmd(0x0f);
- }
- if(s1num==2)
- {
- lcd1602_write_cmd(0x80+0x40+7);
- }
- if(s1num==3)
- {
- lcd1602_write_cmd(0x80+0x40+4);
- }
- if(s1num==4)
- {
- s1num=0;
- lcd1602_write_cmd(0x0c);
- TR0=1;
- }
- }
- }
- if(s1num!=0)
- {
- if(s2==0)
- {
- delay_ms(5);
- if(s2==0)
- {
- while(!s2);
- di();
- if(s1num==1)
- {
- miao++;
- if(miao==60)
- miao=0;
- write_sfm(10,miao);
- lcd1602_write_cmd(0x80+0x40+10);
- at24c02_write_one_byte(1,miao);
- }
- if(s1num==2)
- {
- fen++;
- if(fen==60)
- fen=0;
- write_sfm(7,fen);
- lcd1602_write_cmd(0x80+0x40+7);
- at24c02_write_one_byte(2,fen);
- }
- if(s1num==3)
- {
- shi++;
- if(shi==24)
- shi=0;
- write_sfm(4,shi);
- lcd1602_write_cmd(0x80+0x40+4);
- at24c02_write_one_byte(3,shi);
- }
- }
- }
- if(s3==0)
- {
- delay_ms(5);
- if(s3==0)
- {
- while(!s3);
- di();
- if(s1num==1)
- {
- miao--;
- if(miao==-1)
- miao=59;
- write_sfm(10,miao);
- lcd1602_write_cmd(0x80+0x40+10);
- at24c02_write_one_byte(1,shi);
- }
- if(s1num==2)
- {
- fen--;
- if(fen==-1)
- fen=59;
- write_sfm(7,fen);
- lcd1602_write_cmd(0x80+0x40+7);
- at24c02_write_one_byte(2,fen);
- }
- if(s1num==3)
- {
- shi--;
- if(shi==-1)
- fen=23;
- write_sfm(7,shi);
- lcd1602_write_cmd(0x80+0x40+4);
- at24c02_write_one_byte(3,shi);
- }
- }
-
- }
- }
- }
- /*******************************************************************************
- * 函 數(shù) 名 : main
- * 函數(shù)功能 : 主函數(shù)
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void main()
- {
- u8 num;
- lcd1602_init();//LCD1602初始化
-
- fen=0;
- miao=0;
- shi=0;
- count=0;
- s1num=0;
- for(num=0;num<15;num++)
- {
- lcd1602_write_data(table[num]);
- delay_ms(5);
- }
- lcd1602_write_cmd(0x80+0x40+6);
- lcd1602_write_data(':');
- delay_ms(5);
- lcd1602_write_cmd(0x80+0x40+9);
- lcd1602_write_data(':');
- delay_ms(5);
- miao=at24c02_read_one_byte(1);
- fen=at24c02_read_one_byte(2);
- shi=at24c02_read_one_byte(3);
- write_sfm(10,miao);
- write_sfm(7,fen);
- write_sfm(4,shi);
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- //lcd1602_show_string(0,0,"24c02save");//第二行顯示
- while(1)
- {
- keyscan();
- //sprintf(buffer,"%d%d%d",save_buf[0],save_buf[1],save_buf[2]);
- //lcd1602_show_string(0,1,buffer);//第二行顯示
- }
-
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- count++;
- if(count==20)
- {
- count=0;
- miao++;
- if(miao==60)
- {
- miao=0;
- fen++;
- if(fen==60)
- {
- fen=0;
- shi++;
- if(shi==24)
- {
- shi=0;
- }
- write_sfm(4,shi);
- at24c02_write_one_byte(3,shi);
- }
- write_sfm(7,fen);
- at24c02_write_one_byte(2,fen);
- }
- write_sfm(10,miao);
- at24c02_write_one_byte(1,miao);
- }
- }
復(fù)制代碼
Keil代碼與Proteus8.13仿真下載:
定時(shí)器時(shí)鐘LCD顯示protues仿真.7z
(75.91 KB, 下載次數(shù): 36)
2023-4-9 22:22 上傳
點(diǎn)擊文件名下載附件
51單片機(jī)時(shí)鐘
|
評分
-
查看全部評分
|