《51单片机的24c02电子时钟程序和电路图》.doc
文本预览下载声明
这是一个基于51,24C02的时钟教程,程序已经在protues中仿真,仿真图在下方!!
这个程序由1602显示,通过开发板测试了,还有结合了24c02pdf,24c02时序图,有了这些24c02时序序就没问题了!下面的有详细的程序解说。
主要的还有就是些按键程序,都比较简单的
-------------血顶猎鹰2011-4-13
程序如下,有注释
002.c
#includereg52.h //52库文件
#includeintrins.h //1us延时库文件
#define uint unsigned int //宏定义
#define uchar unsigned char
#include24c02.h //包含24c02头文件
sbit lcdrs=P2^4; //液晶的控制角
sbit lcdrw=P2^5;
sbit lcden=P2^6;
sbit s1=P3^0; //三个调时钟的按键
sbit s2=P3^1;
sbit s3=P3^2;
sbit beep=P2^3; //蜂鸣器
uchar count,s1num;
char miao,shi,fen;
uchar code table[]=2011-04-09 SAT ;
void delayms(uint z) //延时毫秒的程序
{
uint x,y;
for(x=z;x0;x--)
for(y=112;y0;y--);
}
void di() //蜂鸣器的响
{
beep=0;
delayms(100);
beep=1;
}
void write_cmd(uchar cmd) //液晶写命令程序
{
lcden=0;
lcdrs=0;
lcdrw=0;
P0=cmd;
_nop_();
lcden=1;
delayms(1);
lcden=0;
_nop_();
}
void write_dat(uchar dat) //液晶写数据程序
{
lcden=0;
lcdrs=1;
P0=dat;
_nop_();
lcden=1;
delayms(1);
lcden=0;
_nop_();
}
void lcdint() //液晶初始化程序
{
lcden=0;
write_cmd(0x38);
write_cmd(0x0c);
write_cmd(0x06);
write_cmd(0x01);
delayms(1);
}
void write_sfm(uchar s,uchar f,uchar m) //数据在液晶显示
{
uchar ss,sg,fs,fg,ms,mg;
ss=s/10;sg=s%10;
fs=f/10;fg=f%10;
ms=m/10;mg=m%10;
write_cmd(0xc0+4);
write_dat(0x30+ss);
write_dat(0x30+sg);
write_cmd(0xc0+7);
write_dat(0x30+fs);
write_dat(0x30+fg);
write_cmd(0xc0+10);
write_dat(0x30+ms);
write_dat(0x30+mg);
}
void keyscan()
{
if(s1==0) //如果功能按键1按下
{
delayms(5); //去抖动
if(s1==0)
{
while(!s1); //等待松手
s1num++; //主要还是记下次数
di(); //蜂鸣器响
if(s1num==1) //按一下秒钟
{
TR0=0;
write_cmd(0xc0+10); //指针显示闪烁
write_cmd(0x0f);
}
if(s1num==2)
{
write_cmd(0xc0+7);
}
if(s1num==3)
{
write_cmd(0xc0+4);
}
if(s1num==4)
{
s1num=0; count=0;
write_cmd(0x0c);
TR0=1;
}
}
}
if(s1num!=0)
{
if(s2==0) //如果按键2按下执行加
{
delayms(5);
if(s2==0)
{
while(!s2);
di();
if(s1num==1) //对应调整分秒时
{
显示全部