|
本帖最后由 fujian2014 于 2014-11-11 10:20 編輯
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit rs=P3^5;
- sbit lcden=P3^4;
- //sbit s1=P3^0;//功能鍵
- //sbit s2=P3^0;//增大鍵
- //sbit s3=P3^0;//減小鍵
- //sbit s4=P3^0;//鬧鐘查看鍵
- sbit beep=P3^7;
- sbit dscs=P1^4;
- sbit dsas=P1^5;
- sbit dsrw=P1^6;
- sbit dsds=P1^7;
- //sbit dsirq=P2^3;
- uchar count,num1;
- uchar miao,shi,fen,year,month,day,week,amiao,afen,ashi;
- uchar code table[]=" 20 - -"; //年月日顯示格式
- uchar code table1[]=" : : "; //時間顯示格?
- void delay(uint x)
- {
- uint a,b;
- for(a=x;a>0;a--)
- for(b=10;b>0;b--);
- }
- void didi()
- {
- beep=0;
- delay(100);
- beep=1;
- }
- void write_com(uchar com)
- {
- rs=0;
- lcden=0;
- P0=com;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_date(uchar date)
- {
- rs=1;
- lcden=0;
- P0=date;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- /***************ds12c887***************/
- /**************************************/
- void ds_write(uchar add,uchar date)
- { dscs=0;
- dsas=1;
- dsds=1;
- dsrw=1;
- P2=add;
- dsas=0;
- dsrw=0;
- P2=date;
- dsas=1;
- dsrw=1;
- dscs=1;
- }
- uchar ds_read(uchar add)
- {
- uchar date;
- dsas=1;
- dsds=1;
- dsrw=1;
- dscs=0;
- P2=add;
- dsas=0;
- dsds=0;
- P2=0xff;
- date=P2;
- dsas=1;
- dsds=1;
- dscs=1;
- return date;
- }
- void set_time()
- {
- ds_write(0,0);
- ds_write(1,0);
- ds_write(2,0);
- ds_write(3,0);
- ds_write(4,0);
- ds_write(5,0);
- ds_write(6,0);
- ds_write(7,0);
- ds_write(8,0);
- ds_write(9,0);
- }
- void init()
- { uchar num;
- ds_write(0x0A,0x20);
- ds_write(0x0B,0x26);
- ds_read(0x0c);
- set_time();
- write_com(0x38); //顯示模式設置:16×2顯示,5×7點陣,8位數據接口
- delay(10);
- write_com(0x0c); //顯示模式設置
- delay(10);
- write_com(0x06); //顯示模式設置:光標右移,字符不移
- delay(10);
- write_com(0x01); //清屏幕指令,將以前的顯示內容清除
- delay(10);
- num1=0;
- write_com(0x80);
- for(num=0;num<15;num++)
- {
- write_date(table[num]);
- delay(5);
- }
- write_com(0x80+0x40); //在第二行顯示數據
- for(num=0;num<12;num++)
- {
- write_date(table1[num]);
- delay(5);
-
- }
- }
- void write_sfm(int add,int date)
- {
- int shi,ge;
- shi=date/10;
- ge=date%10;
- write_com(0x80+0x40+add);
- write_date(0x30+shi);
- write_date(0x30+ge);
- }
- void write_nyr(uchar add,uchar date)
- {
- char shi,ge;
- shi=date/10;
- ge=date%10;
- write_com(0x80+add);
- write_date(0x30+shi);
- write_date(0x30+ge);
- }
- void write_week(char we)
- {
- write_com(0x80+12);
- switch(we)
- {
- case 1:write_date('M');delay(5);
- write_date('O');delay(5);
- write_date('N');
- break;
- case 2:write_date('T');delay(5);
- write_date('U');delay(5);
- write_date('E');
- break;
- case 3:write_date('W');delay(5);
- write_date('E');delay(5);
- write_date('D');
- break;
- case 4:write_date('T');delay(5);
- write_date('H');delay(5);
- write_date('U');
- break;
- case 5:write_date('F');delay(5);
- write_date('R');delay(5);
- write_date('T');
- break;
- case 6:write_date('S');delay(5);
- write_date('A');delay(5);
- write_date('T');
- break;
- case 7:write_date('S');
- delay(5);
- write_date('U');
- delay(5);
- write_date('N');
- break;
- }
- }
- void main()
- {
- //uchar a;
- init(); //1602初始化
- /*write_com(0x80+40); //設置第二行首字符顯示的位置,為第二行,第一列
- a=0;
- while(table[a]!='\0') //只要沒有寫到結束標志,就繼續寫
- { //這是寫字符的第一種方法,用while循環。
- write_date(table1[a]);
- a++;
- }*/
- while(1)
- {
- miao=ds_read(0);
- fen=ds_read(2);
- shi=ds_read(4);
- write_sfm(10,miao);
- write_sfm(7,fen);
- write_sfm(4,shi);
- }
-
- }
復制代碼
我的程序在下面
|
-
-
-
dsn.zip
2014-11-11 10:13 上傳
點擊文件名下載附件
17.78 KB, 下載次數: 6
仿真圖
|