單片機使用1062lcd設置的電子時鐘。
第一行顯示字符
第二行顯示時間
適用于初學者和一些學生。
在文件里面有源文件C文件以及hex燒錄程序。
大家可以看一看。
單片機源程序如下:
- #include<reg51.h>
- #include<string.h> //strcat():合并字符串
- #define uchar unsigned char
- #define uint unsigned int
- #define GPIO_KEY P1
- sbit E=P2^7; //1602使能引腳
- sbit RW=P2^5; //1602讀寫引腳
- sbit RS=P2^6; //1602數(shù)據(jù)/命令選擇引腳
- uchar table1[]="zhangwenhua2017210484"; //The time is
- //注意修改后的長度
- uchar str1[2]="12"; //second
- uchar str2[2]="12"; //minute
- uchar str3[2]="07"; //hour
- uint KEY_VALUE;
- uint second,minute,hour; //時鐘顯示數(shù)值
- uint tag; //中斷計時指標
- void intTostring(uint num,uchar temp[2]);
- void clock() //時鐘進制函數(shù)
- {
- if(second == 60){minute++;second=0;}
- if(minute == 60){hour++;minute=0;}
- if(hour == 24){hour=0;}
- //數(shù)字->字符串的轉換
- intTostring(second,str1);
- intTostring(minute,str2);
- intTostring(hour,str3);
- // time 已經(jīng)存儲了時間
- }
- void delayms(uint del) //延時1ms
- {
- uint i,j;
- for(i=0;i<del;i++)
- for(j=0;j<=110;j++);
- }
- void writecmd(uchar com) //寫指令
- {
- E=0;
- RS=0;
- RW=0;
- P0=com;
- delayms(2);
- E=1;
- delayms(2);
- E=0;
- }
- void writedata(uchar dat)//寫數(shù)據(jù)
- {
- E=0;
- RS=1;
- RW=0;
- P0=dat;
- delayms(2);
- E=1;
- delayms(2);
- E=0;
- }
- void init(void) //初始化
- {
- delayms(15);
- writecmd(0x38);
- delayms(5);
- writecmd(0x38);
- delayms(5);
- writecmd(0x38);
- writecmd(0x38);
- writecmd(0x08);
- writecmd(0x01);
- writecmd(0x06);
- writecmd(0x0c);
- }
- void intTostring(uint num,uchar temp[2])// 一定要注意這里的字符串長度。
- {
- uint ge,shi;
- shi = num/10;
- ge = num%10;
- temp[0] = shi+48;//利用ASCLL編碼轉換
- temp[1] = ge+48;
- }
- void display()
- {
-
- uchar j;
- uchar i;
- writecmd(0x80); //告訴液晶在哪個地方顯示 (設置地址指針)//80H+00
- for(j=0;j<11;j++) //有11個字符,要循環(huán)11次
- {
- writedata(table1[j]); //The time is
- delayms(5);
- }
-
- writecmd(0x80+0x40); //再設置第二行的起始位置
- //時鐘顯示
- for(i=0;i<2;i++)writedata(str3[i]);
- writedata(':');
- for(i=0;i<2;i++)writedata(str2[i]);
- writedata(':');
- for(i=0;i<2;i++)writedata(str1[i]);
- delayms(5);
- //end
-
- }
- void main()
- {
- TMOD = 0x02; //設置T0為自動重裝初值的工作方式
- TL0 = 0x06;// 12Mhz晶振 --> 1us,此處取250us作為一次中斷所用時間, 那么4000次中斷就算一秒。
- TH0 = 0x06;// 自動重裝初值,不影響精度
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- init();
-
- while(1){
-
- display();
- clock();
-
- }
-
- }
- //利用定時器0計時
- void T0_time() interrupt 1
- {
- if(tag == 4000)
- {
- tag = 0;
- second++;
- }
- tag++;
- }
復制代碼
所有資料51hei提供下載:
電子時鐘.rar
(2.45 KB, 下載次數(shù): 13)
2018-11-22 20:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|