本人最近小搞了下單片機(jī),目前還是菜鳥(niǎo),以下是單片機(jī)程序,基本功能都可以實(shí)現(xiàn),但程序有點(diǎn)小問(wèn)題(反應(yīng)不靈敏),還請(qǐng)高手指點(diǎn)下,感激不盡哦!!!
#include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar code table[]=" 2011-3-11 "; uchar code table1[]=" 14:59:55 "; uchar count, hour, minute, second, press; sbit rs=P2^4; sbit rw=P2^5; sbit en=P2^6; sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; void delay () { ; ;} void write_cmd(uchar cmd) //1602寫(xiě)指令 { rs=0; delay(); rw=0; delay(); en=0; delay(); P0=cmd; en=1; delay(); en=0; delay(); } void write_byte(uchar date) //1602寫(xiě)數(shù)據(jù) { rs=1; delay(); rw=0; delay(); en=0; delay(); P0=date; en=1; delay(); en=0; } void delay1(uint z) { uint x, y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(uchar addr, uchar date) //顯示在液晶屏上 { uchar ge, shi; ge=date%10; shi=date/10; write_cmd(0x80+0x40+addr); write_byte(shi+0x30); write_byte(ge+0x30); } void keyscan() //鍵盤(pán)掃描,key1功能鍵,key2增加,key3減少 { if(key1==0) { delay1(5); if(key1==0) { while(!key1); press++; if(press==1) { TR0=0; write_cmd(0x80+0x40+0x09); write_cmd(0x0f); } if(press==2) { write_cmd(0x80+0x40+0x06); write_cmd(0x0f); } if(press==3) { write_cmd(0x80+0x40+0x03); write_cmd(0x0f); } if(press==4) { press=0; write_cmd(0x0c); TR0=1; } } } if(key2==0) { delay1(5); if(key2==0) { while(!key2); if(press==1) { second++; if(second==60) { second=0; } display(8,second); } if(press==2) { minute++; if(minute==60) { minute=0; } display(5,minute); } if(press==3) { hour++; if(hour==24) { hour=0; } display(2,hour); } } } if(key3==0) { delay1(5); if(key3==0) { while(!key3); if(press==1) { second--; if(second==-1) { second=59; } display(8,second); } if(press==2) { minute--; if(minute==-1) { minute=59; } display(5,minute); } if(press==3) { hour--; if(hour==0) { hour=23; } display(2,hour); } } } } void init () { en=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; write_cmd(0x38); write_cmd(0x0c); write_cmd(0x06); write_cmd(0x01); hour=14; minute=59; second=55; } void timer0 () interrupt 1 //定時(shí)器中斷處理函數(shù) { TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; if(count==18) { count=0; second++; if(second==60) { second=0; minute++; if(minute==60) { minute=0; hour++; if(hour==24) { hour=0; } display(2,hour); } display(5,minute); } display(8,second); } } void main () { uchar i; init(); write_cmd(0x80); for(i=0;i<15;i++) { write_byte(table[i]); delay1(5); } write_cmd(0x80+0x40); for(i=0;i<13;i++) { write_byte(table1[i]); delay1(5); } while(1) { keyscan(); } }