2012-10-31
基于KEIL4和C52的时钟设计 | ## |
指导老师:##
软件课程设计——基于KEIL4和C52的时钟设计
序言
第一章设计思想…………1
第二章制作方法…………1-22
第三章演示………………22
第四章心得体会…………23
第一章设计思想
在电子设计的初级世界里,万年历是最常拿来试手的程序,也有着丰富多彩新颖的设计火花,基于keil4和单片机的万年历设计大多是用DS1302加锂电池,我用延时程序和定时器写,
只是精度不太好,节约了成本!用DS12CR887写的万年历克服了需要锂电池搭配的缺点。希望以后能加入18B20模块和自动对时模块。
第二章制作方法
第一种方法—— 延时程序和定时器
1、设备:keil4,c52单片机带lcd显示屏(图片见电子版)
2、源程序:(有视频详解)
/*可调时钟*/
#include<reg52.h>
#define ui unsigned int
#define uc unsigned char
uc code table[]=" 2012-01-01 MON"; //设置显示初值,初值函数中对应的变量赋值要一
致
uc code table1[]=" 00:00:00";
int num,i,s,f,m,n,y,r,w,s1num;
sbit dula=P2^6;
sbit wela=P2^7; //数码管位选和段选
sbit lcden=P3^4; //LCD使能信号
sbit lcdrs=P3^5; //LCD数据、命令选择端
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2; //键盘
sbit rd=P3^7; //使能
void delay(ui y) //延时函数,y=1时1ms
{
ui x;
for(y;y>0;y--)
for(x=110;x>0;x--);
}
void write_date(uc date) //写数据
{
lcdrs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_com(uc com) //写命令
{
lcdrs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void chuzhi() //初值
{
dula=0;
单片机编程100例详解 wela=0;
lcden=0;
n=2012;
y=1;
r=1;
w=1;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++) //显示位置及数据
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<13;num++)
{
write_date(table1[num]);
delay(5);
}
TMOD=0x01; //定时器0工作方式1
TH0=0x4c;
TL0=0x00; //赋初值、50ms
EA=1;
ET0=1;
TR0=1;
i=0;
}
void write_sfm(uc add,uc date) //时分秒
{
uc shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi); // 详见标准字符库 ,地址已经自动加了一位
write_date(0x30+ge);
}
void write_yr(uc add,uc date) //月日
{
uc shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+shi);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论