没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论












基于 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;
sbit lcdrs=P3^5;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit rd=P3^7;
void delay(ui y)
{
//数码管位选和段选
//LCD 使能信号
//LCD 数据、命令选择端
//键盘
//使能
//延时函数,y=1 时 1ms
ui x;
for(y;y>0;y--)
for(x=110;x>0;x--);
}
void write_date(uc date) //写数据
1

{
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;
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);
}
2

TMOD=0x01;
TH0=0x4c;
TL0=0x00;
EA=1;
//定时器 0 工作方式 1
//赋初值、50ms
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);
write_date(0x30+ge);
}
void write_n(uc add,ui date)
{
//年
uc qian,bai,shi,ge;
qian=date/1000;
bai=date%1000/100;
shi=date%100/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+qian);
write_date(0x30+bai);
write_date(0x30+shi);
write_date(0x30+ge);
}
void write_w(ui add,ui date)
{
//星期
ui w;
write_com(0x80+add);
w=date;
3

switch(w)
{
case 1:{
write_date(0x4d);
write_date(0x4f);
write_date(0x4e);
//MON
//TUE
}
break;
case 2:{
write_date(0x54);
write_date(0x55);
write_date(0x45);
}
break;
case 3:{
write_date(0x57);
write_date(0x45);
write_date(0x44);
break;
//WED
}
case 4:{
write_date(0x54);
write_date(0x48);
write_date(0x55);
break;
//THU
//FRI
}
case 5:{
write_date(0x46);
write_date(0x52);
write_date(0x49);
break;
}
case 6:{
write_date(0x53); //STA
write_date(0x41);
write_date(0x54);
break;
}
case 7:{
write_date(0x53); //SUN
write_date(0x55);
write_date(0x4e);
}
break;
4
剩余23页未读,继续阅读
资源评论

xxpr_ybgg
- 粉丝: 3213
- 资源: 3万+

上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
