給你改了一下試試。
- /* Main.c file generated by New Project wizard
- *
- * Created: 周二 八月 7 2018
- * Processor: 80C52
- * Compiler: Keil for 8051
- */
- #include<reg51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code table[16]={"2018:08:07 "};
- sbit lcdrs=P1^5;
- sbit lcdrw=P1^6;
- sbit lcden=P1^7;
- uchar num;
- uchar int_time;//定義中斷次數計數變量
- uchar second;//秒計數變量
- uchar minute;//分計數變量
- uchar hour;//時計數變量
- uchar code date[]=" Clock w/o RTC";
- uchar code time[]=" TIME 23:59:55";
- void delay(uint z)
- { uint x,y;
- for(x=z;x>0;x--)
- for(y=100;y>0;y--);
- }
- void lcdwritecom(uchar com)
- {
- lcdrw=0;
- lcdrs=0;
- P0=com;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void lcdwritedata(uchar Data)
- {
- lcdrw=0;
- lcdrs=1;
- P0=Data;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- lcdrs=0;
- }
- void write_sfm(uchar *pp, uint n)
- {
- int i;
- for(i=0;i<n;i++)
- {
- lcdwritedata(pp[i]);
- }
- }
- void init()
- {
- lcden=0;
- lcdwritecom(0x3c);
- lcdwritecom(0x0c);
- lcdwritecom(0x06);
- lcdwritecom(0x01);
- lcdwritecom(0x80);
- }
- void clock_init() //對lcd放入初始數據
- {
- uchar i,j;
- for(i=0;i<16;i++)
- {
- lcdwritedata(date[i]);
- }
- lcdwritecom(0x80+0x40);
- for(j=0;j<16;j++)
- {
- lcdwritedata(time[j]);
- }
- }
- void clock_write(uint s,uint m,uint h)//對lcd時間進行刷新
- {
- //write_sfm(0x47,h);
- lcdwritecom(0x80+0x46);
- lcdwritedata('0'+h/10);
- lcdwritedata('0'+h%10);
- //write_sfm(0x4a,m);
- lcdwritecom(0x80+0x49);
- lcdwritedata('0'+m/10);
- lcdwritedata('0'+m%10);
- //write_sfm(0x4d,s);
- lcdwritecom(0x80+0x4c);
- lcdwritedata('0'+s/10);
- lcdwritedata('0'+s%10);
- }
- void main()
- {
- init();
- clock_init(); //放入初始數據
- TMOD|=0x01; //方式1
- EA=1;
- ET0=1;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TR0=1;
- int_time=0; //中斷次數計數變量
- second=55; //秒
- minute=59; //分
- hour=23; //時
-
- for(num=0;num<16;num++)
- {
- lcdwritedata(table[num]);
- delay(5);
- }
- write_sfm(table, 16);
- delay(1000);
- while(1)
- {
- clock_write(second,minute,hour);
- }
- }
- void int0() interrupt 1 using 1 //中斷系統
- {
- int_time++;;
- if(int_time==20)
- {
- int_time=0;
- second++;
- }
- if(second==60)
- {
- second=0;
- minute++;
- }
- if(minute==60)
- {
- minute=0;
- hour++;
- }
- if(hour==24)
- {
- hour=0;
- }
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- }
復制代碼 |