当前位置:文档之家› 智能电子钟LCD显示

智能电子钟LCD显示

智能电子钟LCD显示,有图,求程序
智能电子钟LCD显示,有图,求汇编程序,各位大虾帮帮忙!
1.?设计要求
以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:
(1)?计时:秒、分、时、天、周、月、年。

(2)?闰年自动判别。

(3)?五路定时输出,可任意关断(最大可到16路)。

(4)?时间、月、日交替显示。

(5)?自定任意时刻自动开/关屏。

(6)?计时精度:误差≤1秒/月(具有微调设置)。

(7)?键盘采用动态扫描方式查询。

所有的查询、设置功能均由功能键K1、K2完成。

以前的程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar
sbit lcd_rs=P2^5;
sbit lcd_rw=P2^6;
sbit lcd_en=P2^7; //液晶位定义
sbit Sclk=P1^6;
sbit Io=P3^5;
sbit Rst=P1^7; //DS1302位定义
void init();
uchar ds_read(uchar com);
void ds_write(uchar com,uchar value);
void lcd_write_com(uchar com);
void lcd_write_date(uchar h,uchar w,uchar date);
void delay(uchar z);
void main()
{
init();
while(1)
{
lcd_write_date(0,0,'2');
lcd_write_date(0,1,'0');
lcd_write_date(0,2,table[ds_read(0x8d)/10]);
lcd_write_date(0,3,table[ds_read(0x8d)_x0010_]);
lcd_write_date(0,4,'-');
lcd_write_date(0,5,table[ds_read(0x89)/10]);
lcd_write_date(0,6,table[ds_read(0x89)_x0010_]);
lcd_write_date(0,7,'-');
lcd_write_date(0,8,table[ds_read(0x87)/10]);
lcd_write_date(0,9,table[ds_read(0x87)_x0010_]);
lcd_write_date(0,11,'D');
lcd_write_date(0,12,'a');
lcd_write_date(0,13,'y');
lcd_write_date(0,14,':');
lcd_write_date(0,15,table[ds_read(0x8b)]);
//lcd_write_date(1,0,'c');
//lcd_write_date(1,1,'u');
//lcd_write_date(1,2,'i');
lcd_write_date(1,0,'X');
lcd_write_date(1,1,'i');
lcd_write_date(1,2,'a');
lcd_write_date(1,3,'o');
lcd_write_date(1,4,'D');
lcd_write_date(1,5,'o');
lcd_write_date(1,6,'n');
lcd_write_date(1,7,'g');
lcd_write_date(1,8,table[ds_read(0x85)/10]);
lcd_write_date(1,9,table[ds_read(0x85)_x0010_]);
lcd_write_date(1,10,'-');
lcd_write_date(1,11,table[ds_read(0x83)/10]);
lcd_write_date(1,12,table[ds_read(0x83)_x0010_]);
lcd_write_date(1,13,'-');
lcd_write_date(1,14,table[ds_read(0x81)/10]); lcd_write_date(1,15,table[ds_read(0x81)_x0010_]);
}
}
//*****************液晶写命令操作********************
void lcd_write_com(uchar com)
{
lcd_rs=0;
lcd_rw=0;
lcd_en=0;
P0=com;
delay(5);
lcd_en=1;
delay(5);
lcd_en=0;
}
//*******************液晶写数据操作******************
void lcd_write_date(uchar h,uchar w,uchar date)
{
lcd_write_com(0x80+0x40*h+w);
lcd_rs=1;
lcd_rw=0;
lcd_en=0;
P0=date;
delay(5);
lcd_en=1;
delay(5);
lcd_en=0;
}
//********************初始化*********************
void init()
{
lcd_write_com(0x38);//液晶初始化
lcd_write_com(0x0c);
lcd_write_com(0x06);
lcd_write_com(0x01);
打开写保护ds_write(0x8e,0x00);//
ds_write(0x84,0x00);//选择24时计时
ds_write(0x8c,0x10);//写入10年
ds_write(0x88,0x10);//写入10月
ds_write(0x86,0x28);//写入27日
ds_write(0x8a,0x04);//写入星期3
ds_write(0x84,0x15);//写入15时
ds_write(0x82,0x15);//写入15分
ds_write(0x80,0x00);//写入0秒
ds_write(0x8e,0x80);//关闭写保护
}
//*********************延时操作************************
void delay(uchar z)
{
uchar a,b;
for(a=z;a>0;a--)
for(b=110;b>0;b--);
}
//******************DS1302读操作**********************
uchar ds_read(uchar com)
{
uchar i=0,value=0;
Rst=0;
Sclk=0;
Rst=1;
for(i=0;i<8;i++)
{
Io=com&0x01;
Sclk=0;
Sclk=1;
com>>=1;
}
for(i=0;i<8;i++)
{
Sclk=1;
Sclk=0;
if(Io)
{
value|=0x01<<i;
}
}
Rst=0;
value=(value/16*10)+value_x0016_;
return value;
//*******************DS1302写操作************************* void ds_write(uchar com,uchar value)
{
uchar i;
Rst=0;
Sclk=0;
Rst=1;
for(i=0;i<8;i++)
{
Io=com&0x01;
Sclk=0;
Sclk=1;
com>>=1;
}
for(i=0;i<8;i++)
{
Io=value&0x01;
Sclk=0;
Sclk=1;
value>>=1;
}
}
自己修改吧!.。

相关主题