电子时钟(LCD显示)
电气工程及自动化专业电气工程及自动化专业 单片机原理及应用课程设计报告单片机原理及应用课程设计报告 姓名姓名XXXXXXXXXXXX 学号学号XXXXXXXXXXXXXX 专业班级专业班级XXXXXXXXXXXX 题目电子时钟题目电子时钟LCDLCD 显示)显示) 电气与电子工程学院电气与电子工程学院 二〇一四年十二月三十日二〇一四年十二月三十日 目目录录 一、设计目的一、设计目的2 2 二、设计任务和要求二、设计任务和要求 三、设计原理分析三、设计原理分析 四、硬件资源及其分配四、硬件资源及其分配 五、硬件图五、硬件图 六、程序框图六、程序框图 七、程序七、程序 八、调试运行八、调试运行 九、仿真截图九、仿真截图 十、设计心得体会十、设计心得体会 2 2 2 2 3 3 4 4 5 5 7 7 1313 1313 1414 1 一、设计目的一、设计目的 1、设计要求以 AT89C51 单片机为核心的时钟,在 LCD 显示器上显 示当前的时间。 2、 使用字符型 LCD 显示器显示当前时间。显示格式为“时时分 分秒秒”。 3、用 4 个功能键操作来设置当前时间。 4、熟悉掌握 proteus 编成软件以及 keil 软件的使用 二、设计任务与要求二、设计任务与要求 本设计以 AT89C51 单片机为核心, 通过时钟程序的编写, 并在 LCD 显示器上显示出来。 该编程的核心在于定时器中断及循环往复判断是 否有按键操作,并对每个按键的操作在 LCD 显示器上作出相应的反 应。由于LCD 显示器每八位对应一个字符,故把秒、分、时的个位和 十位分开表示。 该课题中有四个控制开关 KM1、KM2、KM3、KM4 分别控制时、分、 秒、确定的调整,时间按递增的方式调整,每点一次按钮则相应的时 间个位加以,且时间调整不干扰其他为调整时间的显示。 三、设计原理分析三、设计原理分析 1、按照系统的设计功能要求,本时钟系统的设计必须采用单片 机软件系统实现,用单片机的自动控制能力配合按键控制, 来控制时 钟的调整及显示。 时钟电路 数据显示 微微 型型 控控 制制 器器 按键调时 图一 系统总原理图 2 2、软件主要完成功能 (1)显示时间程序 用软件调节时间,通过程序的调节,最后用 LED 现实时钟 (2)调节时间程序 按键调节时间,能实现时、分的调节 3、软件设计主要流程 时间控制程序 时间控制程序,用中断准确的控制时间,采用60 进制,60 秒为 一分钟,60 分钟为一个小时,全天设置为 24 小时。 四、硬件资源及原理图四、硬件资源及原理图 AT89C51芯片 AT89C51 是美国ATMEL 公司生产的8 位Flash ROM 单片机。其最 突出的优点是片内ROM 为Flash ROM,可擦写1000 次以上,应用并不 复杂的通用ROM 写入器就能方便的擦写,读取也很方便,价格低廉, 具有片程序ROM 二级保密系统。因此可灵活应用于各种控制领域。 AT89C51 包含以下一些功能部件 1. 一个 8 位 CPU ; 2. 一个片内振荡器和时钟电路; 3. 4KB Flash ROM ; 4. 128B 内 RAM; 5. 可寻址 64KB 的外 ROM 和外 RAM 控制电路; 6. 两个 16 位定时/计数器; 7. 21 个特殊功能寄存器; 8. 4 个 8 位并行 I/O 口; 9. 一个可编程全双工串行口; 10. 5 个中断源,可设置成 2 个优先级。 AT89C51 单片机一般采用双列直插 DIP 封装,共 40 个引脚,图 2-1 为其引脚排列图。40 个引脚大致可分为 4 类电源、时钟、控 制各 I/O 引脚 3 五、硬件图五、硬件图 4 六、程序框图六、程序框图 LCD 显示 设置 T0 为方式 1 设中断次数为 20 清计时单元 开中断 启动 T0 调用显示子程序 按键程序 调用按键显示子程序 时钟主程序流程 5 保护现场 (46H)146H N 设 置 计 数 初 值 (46H)4 N (47H)2 1S 到 (40H)1(40H) N (40H)10 0(46H) (0)(47H) 0(40H)(46H)1(46H) (41H)141H N (41H)5 0(41H)恢复现场 (43H)1(43H) N (43H)10 返回 (46H) 10 0(43H) 0(46H) (44H)144H N (44H)5 (47) 1(47) 0(44H) 中断服务流程图 6 七、程序七、程序 include include define uchar unsigned char define uint unsigned int define DelayNOP {_nop_;_nop_;_nop_;_nop_;} sbit K1 P00; sbit K2 P01; sbit K3 P02; sbit K4 P03; sbit SPKP30; sbit RS P20; sbit RW P21; sbit E P22; uchar code Str1[] “ Current Time “; // 一下两个字符串的串 长均为 16 uchar code Str2[] “Set New Time. “; uchar HMS_String[]“ 000000 “;//带显示的时间串 bit Settime0; //是否修改时间 bit Change_H_or_M 1;//1 表示修改时.0 表示修改分 uchar MilliSecond,Hour 0,Minute0, Second 0; //延时函数 void DelayMSuint x { uchar i; whilex-- fori0;i120;i; } //LCD 忙状态检测 bit LCD_Busy_Check { 7 bit result; RS 0;RW 1;E 1;DelayNOP;result bitP0 E 0; return result; } //写 LCD 命令 void LCD_Write_Commanduchar { whileLCD_Busy_Check;//判断 LCD 是否忙碌 RS 0;RW 0;E 0;_nop_;_nop_;P0 ; DelayNOP; E 1;