XX 学院
课程
#说明
#
(20XX / 20XX学年第一学期)
课程名称 : 嵌入式系统设计
题 目 : 定时时钟
专业班级 : XXXXXXXXXXXX
学生姓名 : XXX
学 号 : XXXXXXXX
指导教师 : XXXXXX
设计周数 : 2周
设计成绩 :
二OXX年 X 月 XX 日
定时时钟设计说明书
1. 选题意义及背景介绍
电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管显示时间的小时、分钟和秒,并在计时过程中具有整点报时、定时闹钟功能。时钟设有起始状态,时钟显示,设置时钟时,设置时钟分,设置闹钟时和设置闹钟分共六个状态。电子钟设有四个操作按钮:KEY1(MODE)、KEY2(PLUS)、KEY3(MINUS)、KEY4(RESET),对电子钟进行模式切换和设置等操作。
2.1.1
设计
2.1.2系统流程框图
2.1.3电路设计
(整体电路图)
(已封装的SUB1 内部图)
2.1.4主要代码
1)通过循环实现程序的延时
void delay(uint z) {
uint x, y;
for (x = 0; x
=second1 && second总结体会
本设计为基于单片机的电子钟的设计。刚开始,我们很多地方理不清头绪,无从下手,但通过认真研究设计课题,找书上网查资料,确定基本设计方案,对所用芯片功能进行查找、调试,然后画电路图等,积累了很多宝贵的经验。
本设计用1个八位一体的共阳数码管做为显示器,它显示时间值;设计中有四个按键,其中KEY1模式切换键,KEY2为加控制键,KEY3为减控制键KEY4为复位键。
在此次综合课程设计中,我深刻体会到这个设计不只是单靠学好单片机整个一门课程就可以完成的。我充分体会到了全面发展,软硬件两方面要结合起来才能算是完整的掌握了计算机知识。在制作过程中明显感觉自己的单片机设计知识掌握的不够扎实,编程语言也有待提高。在摸索学习的过程中也是自己提高的过程。课程设计使我深入认识到实践能力对于工科学生学习的重要性,增强了我的动手操作能力,为自己将来的学习积累了宝贵经验。
参考文献
[1] 百度文库,基于C51单片机的程序设计.
[2] 百度百科,AT89C52简介
附录:部分程序代码
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit KEY1 = P1 ^ 1; //模式切换键
sbit KEY2 = P1 ^ 2; //加1定义
sbit KEY3 = P1 ^ 7; //减1定义
code unsigned char tab[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
0x80, 0x90, 0xbf, 0xc8, 0x8e, 0xff, 0x21 }; //段码控制
char code weikong_code[] = { 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f };
uchar ms[8] = { 2, 2, 10, 4, 0, 0, 1, 14 };
uchar StrTab[8];
uchar hour = 12, minute = 59, second = 55; //正常时钟,时分秒定义
uchar minute1 = 00, hour1 = 00; second1 = 00; //闹钟时钟,时分秒定义
uchar flag = 0; //切换标志
uint count = 0; //定时器计数,定时50ms,count满20,秒加1
//子函数声明
void showArray(); //显示数组子程序
void alarm(); //闹钟子程序
void alarmSet();
//显示时钟子函数
void display(uchar w[8]) {
unsigned int i, j, aa;
aa = 0xfe; //位选初值1111 1110
//依次将数组w中八个数取出,并显示
for (i = 0; i<8; i++) {
P2 = aa; //位选
j = w[i]; //取出要显示的数码
P0 = tab[j]; //取出段选编码
aa = _crol_(aa, 1); //位选信号循环右移
delay(1); //显示延时
P0 = 0xff; //消影
}
}
//键盘扫描子程序
void keycan() {
//模式切换键按下
if (KEY1 == 0) {
delay(10); //按键1去抖以及动作
if (KEY1 == 0) { //确认按键是否按下
flag++; //切换模式
}
while (!KEY1); //释放按键
}
//正常显示时间
if (flag == 1) {
display(StrTab);
}
(...) //各个模式之间的切换
}
//数字电子钟主函数
void main() {
P1 = 0XFF; //模式切换键
P3 = 0X00; //闹钟输出初始低电位
TMOD = 0X11; //time0为定时器
TH0 = (65536 - 50000) / 256; //预置计数初值,50ms
TL0 = (65536 - 50000) % 256;
EA = 1; //总中断开
ET0 = 1; //允许定时器0中断
//主循环
while (1) {
if (flag == 0){
TR0 = 0;
display(ms); //上电初始化就显示bad.1004-22
}
if (P1 != 0XFF) {
keycan(); //按键提前扫描
}
if (flag>0) {
//正常显示时,检测整点闹钟
if (flag == 1) {
TR0 = 1;
display(StrTab);
alarm();
}
//设置正常时间
if (flag == 2 || flag == 3) {
display(StrTab);
}
//设置闹钟时间
if (flag == 4 || flag == 5) {
alarmSet();
}
//当模式切换到6时,模式变为1,循环
if (flag == 6) {
display(StrTab);
alarm();
flag = 1;
}
}
}
}
* 此文档仅供参考,学习和交流!
程序电路仿真图和完整源代码下载地址: