基于液晶显示的数字时钟设计
- 格式:doc
- 大小:83.50 KB
- 文档页数:6
完成课程设计报告,报告包括的内容:
课程设计目的、课程设计的原理(简要说明即可);
课程设计内容及步骤(包括问题分析,算法设计,功能模块分割,主程序框图,仿真电路模型,仿真对比分析);
课程设计结果及结论(验证结果的图示,误差分析与改进措施,创新说明);
课程设计的心得体会、参考文献、附录(源程序代码)。
char increase_deincrease=1;//时间增减标志
void timechange(void);//修改时间函数
char stop_run=0;//时钟暂停运行暂停标志
sbit rs=P3^5;
sbit rw=P3^6;
sbit en=P3^7;
char count=20;
char name[]="ZHANGXUYUN & SHIJIAN 2010-6-21";
if(second<=0)
{
second=59;
if(minute<=0)
{
minute=59;
if(hour<=0) hour =23;
else hour--;
}
}
else second--;
}
}
}
}
电路图如下:
d[7]=hour%10+0x30;
d[6]=':';
d[5]=minute/10+0x30;
d[4]=minute%10+0x30;
d[3]=':';
d[2]=second/10+0x30;
d[1]=second%10+0x30;
if(ampm==0) d[0]=0;
else d[0]=1;
}
void write_inst(char inst)
write_inst(0x0f);//关闭显示功能
write_inst(0x01);//清屏
write_inst(0x06);//字符地址加一 光标地址加一
write_inst(0x0e);//函数结束
}
void clock(void)interrupt 1
{
TH0=(65536-50000)/256;
if(key4==0)
{
delay1ms(20);
if(key4==0)
{
if(stop_run==1) stop_run=0;
else stop_run++;
}
}
if(stop_run==1)TR0=0;
else TR0=1;
}
}
void transfer(void)
{
d[8]=hour/10+0x30;
{
minute=0;
if(hour>=23) hour =0;
else hour++;
}
else minute++;;
}
else second++;
}
}
}
else
{if(key0==0)
{
delay1ms(20);
if(key0==0)
{
if(hour<=0) hour =23;
else hour--;
void write_char(char);
void delay1ms(int);
void check_BF(void);
void init_lcm(void);
main()
{
char i;
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
{
lcdp=inst;
rs=0;rw=0;
en=0;
delay1ms(10);
en=1;
delay1ms(10);
en=0;
check_BF();
}
void write_char(char character)
{
lcdp=character;
rs=1;
rw=0;
en=0;
delay1ms(10);
en=1;
write_char(d[8-i]);//写数据
}
if(key3==0)
{
delay1ms(20);
if(key3==0)
{
if( increase_deincrease==1) increase_deincrease=0;
else increase_deincrease++;
}
}
timechange();
delay1ms(10);
en=0;
check_BF();
}
void check_BF(void)
{
char i,x=0x80;
while(x&0x80)
{
rs=0;rw=1;
en=1;
x=lcdp;
en=0;
for(i=0;i<10;i++);
}
}
void delay1ms(int x)
{
int i,j;
char d[]={'0','0',':','0','0',':','0','0','0'};//初始00:00:00
bit ampm=0;
char hour=0;
char minute=0;
char second=0;
void transfer(void);
void write_inst(char);
基于液晶显示的数字时钟设计
基于液晶显示的数字时钟设计的具体要求:
* 要求学生能够熟练地用单片机中定时/计数、中断、LCD显示等技术,参考教材或相关资料,采用汇编或C语言采用编程实现数字时钟的功能,在LCD 1602上实时显示,并运用Proteus软件绘制电路原理图,进行仿真验证和误差分析,并针对存在的问题提出改进措施。
TL0=(65536-50000)%256;
while(--count==0)
{
count=20;
second++;
if(second>=60)
{
second=0;
minute++;
if(minute>=60)
{
minute=0;
hour++;
if(hour>=23)
{
hour=0;
//ampm=~ampm;
}
}
}
}
}
void timechange(void)
{
if(increase_deincrease==1)
{
if(key0==0)
{
delay1ms(20);
if(key0==0)
{
if(hour>=23) hour =0;
else hour++;
}
}
if(key1==0)
{
delay1ms(20);
程序代码如下:
#include<reg52.h>
#define lcdp P1
sbit key0=P2^0;//按键改变时针
sbit key1=P2^1;//按键改变分针
sbit key2=P2^2;//按键改变秒针
sbit key3=P2^3;//按键控制增减
sbit key4=P2^4;//按键控制暂停或运行
}
}
if(key1==0)
{
delay1ms(20);
if(key1==0)
{
if(minute<=0)
{
minute=59;
if(hour<=0) hour =23;
else hour--;
}
else minute--;
}
}
if(key2==0)
{
delay1ms(20);
if(key2==0)
{
for(i=1;i<x;i++)
for(j=1;j<120;j++);
}
void init_lcm(void)
{
write_inst(0x30);//设置功能
write_inst(0x30);//设置功能
write_inst(0x30);//设置功能
write_inst(0x38);//显示模式设置
if(key1==0)
{
if(minute>=59)
{
minute=0;
if(hour>=23) hour =0;
else hour++;
}
else minute++;
}
}
if(key2==0)
{
delay1ms(20);
if(key2==0)
{
if(second>=59)
{
second=0;
if(minute>=59)
* 时钟的计时工作范围在00:00:00~23:59:59秒之内,秒误差小于0.1%。
* 在液晶板分两行显示。第一行显示编程者姓名的汉语拼音和日期,如“Luo zhihui 2008-6-21”,要求位于显示屏的中间位置;第二行显示时钟的运行时间。