单片机课程设计液晶显示数字时钟sc.docx
- 文档编号:10253639
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:16
- 大小:52.55KB
单片机课程设计液晶显示数字时钟sc.docx
《单片机课程设计液晶显示数字时钟sc.docx》由会员分享,可在线阅读,更多相关《单片机课程设计液晶显示数字时钟sc.docx(16页珍藏版)》请在冰点文库上搜索。
单片机课程设计液晶显示数字时钟sc
单片机课程设计报告
课程设计题目:
可调时间的简易数字时钟
仿真图如下:
实验程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P3^5;//rs=1则向液晶写数据rs=0写命令;
sbitlcden=P3^4;
sbits1=P1^1;//功能键只有按下才能调整时间
sbits2=P1^2;//每按一次数值加1;
sbits3=P1^3;//每按一次数值减一;
sbitrd=P3^7;
ucharcount,s1num;
charmiao,shi,fen,yue,ri,nian;
ucharcodetable[]="11-03-28";//初始化液晶
ucharcodetable1[]="16:
07:
01";
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)//写命令的指令
{
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_date(uchardate)//写数据的指令
{
rs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit()//初始化函数
{
ucharnum;
s0=0;
dula=0;
wela=0;
lcden=0;
fen=7;
miao=1;
shi=16;
nian=11;
yue=3;
ri=26;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
//write_com(0x80);
for(num=0;num<9;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<9;num++)
{
write_date(table1[num]);
delay(5);
}
TMOD=0x01;//开中断
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voidwrite_sfm(ucharadd,uchardate)//写时分秒指令
{
ucharsw,gw;
//shi=date/10;
sw=date/10;
gw=date%10;
write_com(0x80+0x40+add);
write_date(0x30+sw);
write_date(0x30+gw);
}
voidwrite_nyr(ucharadr,uchardt)//写年月日指令
{
ucharshiw,gew;
//shi=date/10;
shiw=dt/10;
gew=dt%10;
write_com(0x80+adr);
write_date(0x30+shiw);
write_date(0x30+gew);
}
voidkeyscan()//按键扫描
{
//rd=0;
if(s1==0)
{
delay(5);
if(s1==0)
{
s1num++;
while(!
s1);
if(s1num==1)
{
TR0=0;
write_com(0x80+0x40+7);
write_com(0x0f);
}
//}
if(s1num==2)
{
write_com(0x80+0x40+4);
}
if(s1num==3)
{
write_com(0x80+0x40+1);
}
if(s1num==4)
{
write_com(0x80+7);
//TR0=1;
}
//}
if(s1num==5)
{
//s1num=0;
write_com(0x80+4);
}
if(s1num==6)
{
//s1num=0;
write_com(0x80+1);
}
if(s1num==7)
{
s1num=0;
write_com(0x0c);
TR0=1;
}
}
}
if(s1num!
=0)
{
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!
s2);
if(s1num==1)
{
miao++;
if(miao==60)
miao=0;
write_sfm(7,miao);
write_com(0x80+0x40+7);
}
if(s1num==2)
{
fen++;
if(fen==60)
fen=0;
write_sfm(4,fen);
write_com(0x80+0x40+4);
}
if(s1num==3)
{
shi++;
if(shi==24)
shi=0;
write_sfm(1,shi);
write_com(0x80+0x40+1);
}
if(s1num==4)
{
ri++;
if(ri==31)
ri=0;
write_nyr(7,ri);
write_com(0x80+0x07);
}
if(s1num==5)
{
yue++;
if(yue==13)
yue=0;
write_nyr(4,yue);
write_com(0x80+0x04);
}
if(s1num==6)
{
nian++;
//if(shi==24)
//shi=0;
write_nyr(1,nian);
write_com(0x80+0x01);
}
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!
s3);
if(s1num==1)
{
/*if(miao==0)
{
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}*/
miao--;
if(miao==-1)
miao=59;
write_sfm(7,miao);
write_com(0x80+0x40+7);
}
if(s1num==2)
{
fen--;
if(fen==-1)
fen=59;
write_sfm(4,fen);
write_com(0x80+0x40+4);
}
if(s1num==3)
{
shi--;
if(shi==-1)
shi=23;
write_sfm(1,shi);
write_com(0x80+0x40+1);
}
if(s1num==4)
{
ri--;
if(ri==-1)
ri=30;
write_nyr(7,ri);
write_com(0x80+0x07);
}
if(s1num==5)
{
yue--;
if(yue==-1)
yue=12;
write_nyr(4,yue);
write_com(0x80+0x04);
}
if(s1num==6)
{
nian--;
//if(shi==24)
//shi=0;
write_nyr(1,nian);
write_com(0x80+0x01);
}
}
}
}
}
voidmain()
{
init();
while
(1)
{
keyscan();
}
//while
(1);
}
voidtimer0()interrupt1//使用定时器0计时
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==18)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
ri++;
if(ri==31)
{
ri=0;
yue++;
if(yue==13)
{
yue=0;
nian++;
write_nyr(1,nian);
}
write_nyr(4,yue);
}
write_nyr(7,ri);
}
write_sfm(1,shi);
}
write_sfm(4,fen);
}
write_sfm(7,miao);
}
}
实验结果为:
1.上电后液晶开始显示时间
2.按下s1开始调时间,光标闪烁。
按下s1的次数为1到6次时,光标闪烁的位置分别为秒、分、时、日、月、年。
按下s2或s3可以加减数值。
3.当按下第七下s1时,液晶正常显示时间。
注:
只有先按下s1键时,其它按键才会有效。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 液晶显示 数字 时钟 sc