单片机完整版

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 //包含52单片机头文件

#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();

相关文档
最新文档