标题:
12864显示可调时钟天气日历
[打印本页]
作者:
609763691
时间:
2018-7-19 19:38
标题:
12864显示可调时钟天气日历
程序简单清晰,有疑问帖子留言回复!
单片机源程序如下:
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^6;
sbit RW=P2^5;
sbit EP=P2^7;
sbit K1=P3^1;
sbit K2=P3^0;
sbit K3=P3^2;
uchar num,t;
uchar K1num;
char s,f,m;
uchar code table []="2017-05-21 MON";
uchar code table1 []=" 00: 00: 00 AM";
uchar code table2 []="重庆今日 多云";
uchar code table3 []="东方 20-25 *C";
void init1();
void delay(uint k)
{
uint i,j;
for(i=k;i>0;i--)
for(j=110;j>0;j--);
}
void write(uchar com)
{
RS=0;
RW=0;
P0=com;
delay(5);
EP=1;
delay(5);
EP=0;
}
void read(uchar date)
{
RS=1;
RW=0;
P0=date;
delay(5);
EP=1;
delay(5);
EP=0;
}
void init()
{
RS=0;
RW=0;
EP=0;
write(0x38);
write(0x0c);
write(0x06);
write(0x01);
write(0x80);
for(num=0;num<14;num++)
{
read(table[num]);
delay(20);
}
write(0x90);
for(num=0;num<11;num++)
{
read(table2[num]);
delay(20);
}
write(0x98);
for(num=0;num<14;num++)
{
read(table3[num]);
delay(20);
}
write(0x88);
for(num=0;num<16;num++)
{
read(table1[num]);
delay(20);
}
}
void write_sfm(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write(0x83+add);
read(0x30+shi);
read(0x30+ge);
}
void key()
{
if(K1==0)
{
delay(5);
if(K1==0)
{
K1num++;
while(!K1);
if(K1num==1)
{
TR0=0;
write(0x83+10); //为啥子是 0x83 ???
write(0x0f); //重新规定,显示光标
}
}
if(K1num==2)
{
write(0x83+8);
}
if(K1num==3)
{
write(0x83+6);
}
if(K1num==4)
{
K1num=0;
write(0x0c); //无光标 ,不闪烁
TR0=1;
}
}
if(K1num!=0)
{
if(K2==0)
{
delay(5);
if(K2==0)
{
while(!K2);
if(K1num==1)
{
m++;
if(m==60)
m=0;
write_sfm(10,m);
write(0x83+10);
}
if(K1num==2)
{
f++;
if(f==60)
f=0;
write_sfm(8,f);
write(0x83+8);
}
if(K1num==3)
{
s++;
if(s==23)
s=0;
write_sfm(6,s);
write(0x83+6);
}
}
}
if(K3==0)
{
delay(5);
if(K3==0)
{
while(!K3);
if(K1num==1)
{
m--;
if(m==1)
m=59;
write_sfm(10,m);
write(0x83+10);
}
if(K1num==2)
{
f--;
if(f==1)
f=59;
write_sfm(8,f);
write(0x83+8);
}
if(K1num==3)
{
s--;
if(s==1)
m=23;
write_sfm(6,s);
write(0x83+6);
}
}
}
}
}
void main()
{
init();
init1();
while(1)
{
key();
}
}
void init1()
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
TH0=(65636-50000)/256;
TL0=(65636-50000)%256;
}
void time0() interrupt 1
{
TH0=(65636-50000)/256;
TL0=(65636-50000)%256;
t++;
if(t==18) //与上面的50000有一秒左右
{
t=0;
m++;
if(m==60)
{
m=0;
f++;
if(f==60)
{
f=0;
s++;
if(s==24)
{
s=0;
}
write_sfm(6,s);
}
write_sfm(8,f);
}
write_sfm(10,m);
}
}
复制代码
所有资料51hei提供下载:
12864显示可调时钟天气日历.zip
(41.23 KB, 下载次数: 26)
2018-7-19 19:37 上传
点击文件名下载附件
源程序及代码
下载积分: 黑币 -5
作者:
admin
时间:
2018-7-19 20:19
本帖需要分享原理图后才可获得100积分
作者:
609763691
时间:
2018-7-20 10:32
12864显示的开发板原理图,有问题留言回复,谢谢!
HC6800-ES V2.0 新版.pdf
2018-7-20 10:31 上传
点击文件名下载附件
下载积分: 黑币 -5
759.71 KB, 下载次数: 12, 下载积分: 黑币 -5
51板子程序原理图
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1