单片机完整版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
长春建筑学院
设计题目:数字时钟
班级:电091
姓名:
学号:08
指导老师:
日期:2012 08 23
题目名称:数字时钟
长春建筑学院电气信息学院
项目实现功能:使用TX-1C实验板自带的配件及板上资源设计一个时钟,要求如下:
(1)时间显示在1602液晶上,并且按秒实时更新。
(2)能够使用板上的按键随时调节时钟的时、分、秒,按键可设计三个有效键,分别为功能选择键、数值增大键、数值减小键。
(3)每次有键按下时,蜂鸣器都以短“滴”声报警。(4)利用板上的AT24C02设计实现断电自动保护显示数据的功能,当下次上电时会接上上次断电前的时间数据继续运行。
一、设计方案
1、单片机引脚接线
单片机的P0.0~P0.7加上拉电阻并与1602液晶的D0~D7连接,通过单片机内部的程序驱动整个系统运行。
2、24C02电路
AT24C02电路实现断电保护显示数据的功能,当下次上电时会接着上断电前的时间数据继续运行。
3、1602电路
1602的管脚与单片机相连,单片机将数据传送到1602实现时钟的显示功能。
4、蜂鸣器电路
通过非门与ULN2003来驱动蜂鸣器
5、总仿真电路
启动前
启动后
二、系统调试
主控芯片为AT89C52,晶振为11.0592M,由于处理器速度满足全部功能的实现,故用通俗明了的C语言编写源程序。
将程序下载到已经设计好的硬件电路中进行调试,通过不断
的纠正和改进,终于实现了时钟的正常显示。
三、C语言程序
#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; //定义锁存器锁存端
sbit wela=P2^7;
sbit rs=P3^5; //定义1602液晶RS端
sbit lcden=P3^4; //定义1602液晶LCDEN端
sbit s1=P3^0; //定义按键--功能键
sbit s2=P3^1; //定义按键--增加键
sbit s3=P3^2; //定义按键--减小键
sbit rd=P3^7;
sbit beep=P2^3; //定义蜂鸣器端
bit write=0; //写24C02的标志;
sbit sda=P2^0;
sbit scl=P2^1;
uchar count,s1num;
char miao,shi,fen;
uchar code table[]=" 2012-8-21 TUE"; //定义初始上电时液晶默认显示状态void delay0()
{ ;; }
void start() //开始信号{
sda=1;
delay0();
scl=1;
delay0();
sda=0;
delay0();
}
void stop() //停止
{
sda=0;
delay0();
scl=1;
delay0();
sda=1;
delay0();
}
void respons() //应答
{
uchar i;
scl=1;
delay0();
while((sda==1)&&(i<250))i++;
scl=0;
delay0();
}
void init_24c02() //IIC初始化函数{
sda=1;
delay0();
scl=1;
delay0();
}
void write_byte(uchar date) //写一个字节函数{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay0();
sda=CY;
delay0();
scl=1;
delay0();
}
scl=0;
delay0();
sda=1;
delay0();
}
uchar read_byte() //读一个字节函数
{
uchar i,k;
scl=0;
delay0();
sda=1;
delay0();
for(i=0;i<8;i++)
{
scl=1;
delay0();
k=(k<<1)|sda;
scl=0;
delay0();
}
return k;
}
void write_add(uchar address,uchar date) //指定地址写一个字节{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
char read_add(uchar address) //指定地址读一个字节{
uchar date;
start();
write_byte(0xa0);
respons();