课 程 设 计 报 告交通灯控制器.docx
- 文档编号:7379459
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:18
- 大小:497.53KB
课 程 设 计 报 告交通灯控制器.docx
《课 程 设 计 报 告交通灯控制器.docx》由会员分享,可在线阅读,更多相关《课 程 设 计 报 告交通灯控制器.docx(18页珍藏版)》请在冰点文库上搜索。
课程设计报告交通灯控制器
课程设计报告
课程名称LED电子时钟设计
系院:
信息工程学院
专业班级:
学号:
姓名:
课程题目:
电子钟的设计
完成日期:
2011-6-8
指导老师:
莫钊
2011年06月08日
南昌工程学院
课程设计(设计)任务书
Ⅰ、课程设计(论文)题目:
LED电子时钟设计
II.课程设计(论文)使用的原始资料(数据)及设计要求:
要求:
1.采用51系列单片机控制CPU,6位数码管显示时间(时:
分:
秒);
2.安排三个按钮开关(S,↑,↓)用于调时及功能设置;
3.首次上电复位时显示0时0分0秒
4.当按下S键时,进入时间调整状态,首先调整小时,对应的小时显示
KED闪亮,通过↑,↓键调整,采用24小时制;
5.再次按下键,进入分钟调整,方法同第4点要求;
6.分钟调整完毕后,按键退出调整状态,进入正常运行方式
7.完成仿真
Ⅲ、课程设计(论文)工作内容及完成时间
5月30日至6月2日:
查找质料,方案论证;
6月3日至6月6日:
硬件电路的设计、制作与调试;
6月7日至6月9日:
软件框图设计、编写程序;
6月10日至6月12日:
撰写设计报告,软,硬件联合调试与实验;
Ⅳ、主要参考质料:
1、董晓红,单片机原理及接口技术,西安电子科技大学出版社,2004
2、何立民,-51系列单片机应用系统设计配置与接口技术,
北京航空航天大学出版社。
2001
3李建总,单片机原理及应用,西安电子科技大学出版社,2002
4潘永雄,新编单片机原理与应用.西安:
西安电子科技大学出版社.2003
信息工程学院系应用电子专业类一班
学生李果
日期:
自2011年5月30日至2011年6月12日
指导老师莫钊
助理指导老师(并指出所负责的部分):
教研室主任
课程设计目的
通过课程设计,熟悉89C51定时器,中断初始化编程方法,解定时器应用在时时控制中程序的设计技巧。
使学生巩固和加深对单片机基本知识的理解,学会查寻资料、方案设计、方案比较,以及单元电路设计计算等环节,进一步提高学生综合运用所学知识的能力,提高分析解决实际问题的能力。
锻炼分析、解决电子电路问题的实际本领,通过此综合训练,为以后毕业设计打下一定的基础。
课程设计要求
(1)采用51系列单片机作控制CPU,8位数码管显示时间
(2)安排三个按键开关(S1,S2,S3)用于调时及功能设置
(3)上电以后自动进入计时状态,起始于00:
00。
(4)当按键下S键时,进入时间调整状态,首先调整小时,对应的小时显示LED闪亮,通过S2,S3对小时加和减,采用24小时制。
(5)再次按下S键,进入分钟调整,方法同4.
(6)分钟调整完毕后,按S键退出调整,进入正常运行方式
(7)完成protuse仿真
课程设计注意事项
1.注意总体设计思路要清晰。
2.设计过程中要讲究团队合作,分工完成。
3.仔细调试程序防止出错。
课程设计内容
1.编写程序,控制数码管的显示,设计数码管动态扫描
2.定时时间为1秒,采用定时器实现
3.按键扫描
4.采用键盘及数码管显示单元显示时、分、秒数字显示
5.采用24小时制
课程设计简要操作步骤
1.设计硬件电路。
2.编写无按键扫描的实验程序。
3.检查无误后,编译、链接并启动调试。
4.运行实验程序,按下按键,观察数码管的显示,验证程序功能。
课程设计心得体会
课程设计是一个学习新知识、巩固加深所学课本理论知识的过程,它培养了我们综合运用知识的能力,独立思考和解决问题的能力。
它不仅加深了我对单片机课程的理解,还让我感受到了编程的乐趣。
在这次设计中,我一点也不怕麻烦,反复思考与修改,就是希望能把这次课程设计做好。
因此对我来说,这次课程设计是非常有意义的。
标题:
电子时钟设计
论文摘要:
介绍了一种基于89C51单片机设计电子钟的方法。
首先介绍了电子钟的工作原理、89C51单片机的性能和特点、并概述了用单片机实现电子钟的硬件框图及软件实现方法。
本设计以89C51芯片为核心,辅以必要的外围电路,设计了一个简易的电子钟。
它由八个七段LED数码管动态扫描来显示,三个按键实现时间的调整,软件方面采用C编语言编程。
该电子钟具有计时准确、调整时间容易等特点。
关键词:
电子钟;单片机;时间;发光二极管
目录
一、绪论……………………
二、单片机最小系统……………….
三、按键模块………………..
四、设计原理图……………….
五、程序流程图…………………
六、实验调试过程…………….
七、课程设计心得……………
八、总结……………………
一、绪论
本文主要介绍了单片机定时控制器的硬件设计过程。
单片机作为主控器件,是整个系统的核心,它起到主要的控制作用;时钟芯片为系统提供一个数字钟,定时功能的实现也要依赖它;按键部分采用独立式结构,主要用作调时和定时,也可用作功能选择。
本文完成了对系统硬件电路制作、软件设计和调试过程的说明,系统最终实现分时段定时控制的功能。
1、单片机最小系统
单片机最小系统主要由电源、复位、振荡电路以及扩展部分等部分组成。
2、显示模块
显示模块是本次单片机课程设计最核心的部分。
采用LED共阳极数码管。
共阳数码管在应用时将公共极COM接到地线VCC上,当某一字段发光二极管的阳极为低电平时,相应字段就点亮。
当某一字段的阳极为高电平时,相应字段就不亮。
对于6路共阴极数码管数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类:
方案一:
静态显示驱动。
就是每一个数码管显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。
这样单片机只要把要显示的字形代码发送到接口电路,直到要显示新的数据时,再发送新的字形码,因此,使用这种办法单片机中CPU的占用较小。
但对于静态显示方式,所需的数据锁存装置很多,引线多而复杂,且可靠性也较低。
方案二:
动态显示驱动。
通过单片机对数码管位选通COM端电路的控制,只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
动态显示可以大幅度地降低硬件成本和电源的功耗,因为某一时刻只有一个数码管工作,也就是所谓的分时显示,故显示所需要的硬件电路可分时复用。
动态显示方式,可以避免静态显示的问题。
但设计上如果处理不当,易造成亮度低,闪烁问题。
因此合理的设计既应保证驱动电路易实现,又要保证显示后的数据稳定,无闪烁。
动态显示采用多路复用技术的动态扫描显示方式,复用的程度不是无限增加的,因为利用动态扫描显示使我们看到一幅稳定画面的实质是利用了人眼的暂留效应和发光二极管发光时间的长短,发光的亮度等因素.我们通过实验发现,当扫描刷新频率(发光二极管的停闪频率)为50Hz,发光二极管导通时间≥1ms时,显示亮度较好,无闪烁感.。
3、按键模块
键盘是人与单片机打交道的主要设备,按键的读取容易引起误动作。
可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,延时时间为20ms
方案一:
采用独立式键盘。
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。
但当所需按键数量多,会占用过多的I/O口线。
方案二:
采用矩阵键盘。
因为单片机的I/O口有限,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口线。
但必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。
基于以上分析,我们选用方案一,因为本次设计中仅用到3个按键。
独立式按键键盘有利于程序的编写,更简单些。
四、设计原理图
五、程序流程图
(1)根据以上的电子时钟的设计要求可以分为以下的几个硬件电路模块:
单片机模块、数码显示模块、晶振模块、电源模块与按键模块等,模块之间的关系图如下面得方框电路图所示。
(2)总体流程图
主程序流程图
#include
sbitk01=P0^0;
sbitk02=P0^1;
sbitk03=P0^2;
unsignedchartt,m,h,t;
unsignedcharTab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//显示0到9
unsignedcharport[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选
unsignedcharint_time;//中断次数计数变量
unsignedcharsecond;//秒计数变量
unsignedcharminute;//分钟计数变量
unsignedcharhour;//小时计数变量
voiddelay(void)
{
unsignedcharj;for(j=0;j<200;j++);
//动态延时0.6ms
}
voiddelay20ms(void)//延时秒的子程序
{unsignedchari,k;
for(i=0;i<100;i++)
for(k=0;k<60;k++);
}
voiddisplaysecond(unsignedchars)//显示秒
{
P2=0xbf;P1=Tab[s/10];delay();//p26=0十位
P2=0x7f;P1=Tab[s%10];delay();//p27=0个位
P2=0xff;//关闭所有的数码管
}
voiddisplayminute(unsignedcharm)//显示fen
{
P2=0xf7;P1=Tab[m/10];delay();
P2=0xef;P1=Tab[m%10];delay();
P2=0xdf;P1=0xbf;delay();//显示-
P2=0xff;
}
voiddisplayhour(unsignedcharh)//显示时
{
if(h<24){
P2=0xfe;P1=Tab[h/10];delay();
P2=0xfd;P1=Tab[h%10];delay();
P2=0xfb;P1=0xbf;delay();//显示-
P2=0xff;}
}
voidmain(void)
{
tt=0;
EA=1;//开启定时器中断
ET0=1;
TMOD=0x11;//工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//50ms
TR0=1;
TH0=0xff;//计数器赋值
TL0=0xff;
int_time=0;
second=0;
minute=0;
hour=0;//时间初始化
while
(1)
{
if(!
k01)
{
delay20ms();delay20ms();//消抖
if(!
k01)//确定有键按下
tt++;//记录按键次数
if(tt==1)
{
ET1=1;//开启计数器中断
TR1=1;
TR0=0;//开启计数器中断
}
if(tt==2)
{
ET1=1;//开启计数器中断
TR1=1;
TR0=0;//开启计数器中断
}
if(tt==3)
{
ET1=0;//关闭计数器中断
TR1=0;
TR0=1;//启动定时器中断
tt=0;}}
displaysecond(second);delay();//显示秒
displayminute(minute);delay();//显示分
displayhour(hour);delay();//显示时
}}
voidt0(void)interrupt1using1//定时器中断
{
if(k01)//判断k01开关是否按下,按下为0,没按为1
{
int_time++;
if(int_time==20)//中断20次,计满1s
{
int_time=0;
second++;
}
if(second==60)//计60s就进位,分加一
{
second=0;
minute++;
}
if(minute==60)//计60分就进位,时加一
{
minute=0;
hour++;
}
if(hour==24)
{
hour=0;}//满24小时清零
TH0=(65536-46083)/256;
TL0=(65536-46083)%256;//定时器再次赋值
TR0=1;}}
voidt1(void)interrupt3using2//计数器中断
{
TH0=0xff;
TL0=0xff;//初始化
if(tt==1)//
{
if(!
k02)
{delay20ms();delay20ms();
if(!
k02)//k01按下进入调时,每次按下k02都加一
hour++;
if(hour<24)//加到24时转到else
{
P2=0x02;
P1=Tab[h/10];delay();
P2=0x04;
P1=Tab[h%10];delay();}//把调整的时间送到P1口
else
{
P2=0x02;
P1=Tab[0];delay();
P2=0x04;
P1=Tab[0];delay();//加到24时让显示时的数码管清零
}}
if(!
k03)//k01按下进入调时,每次按下k03都减一
{
delay20ms();delay20ms();
if(!
k03)
if(hour>0)//减到0是就转else
{hour--;
P2=0x02;P1=Tab[h/10];delay();
P2=0x04;P1=Tab[h%10];delay();}//把调整的时间送到P1口
else
{
P2=0x02;
P1=Tab[3];delay();
P2=0x04;
P1=Tab[5];delay();
hour--;}
}}
if(tt==2)//k01第二次被按下
{
if(!
k02)
{
delay20ms();delay20ms();
if(!
k02)//确认k02被按下,对分加一
if(minute<60)//加到60转else
{minute++;
P2=0x02;
P1=Tab[m/10];delay();
P2=0x04;
P1=Tab[m%10];delay();}}//把调整的时间送到P1口
else
{
P2=0x02;
P1=Tab[0];delay();
P2=0x04;
P1=Tab[0];delay();////加到60时让显示分的数码管清零
}
if(!
k03)
{
delay20ms();delay20ms();
if(!
k03)//确认k03被按下,对分减一
if(minute>0)//减到0转else
{
minute--;
P2=0x08;P1=Tab[m/10];delay();
P2=0x10;P1=Tab[m%10];delay();}//把调整的时间送到P1口
else
{
P2=0x02;
P1=Tab[0];delay();
P2=0x04;
P1=Tab[0];delay();}//减到0时让显示分的数码管清零
}
}
}
上电时截图
第一次按下s1时再按下s2的图
第一次按下s1时再按下s3的图
第二次按下s1键s2调分
第二次按下s1键s3调分
第三次按下s1键时
六、实验调试过程
功能太过单调,只能实现时分秒的显示,设计比较简单。
电路图的设计过于单调,用的器件太少,不能实现时间的调节。
为了美观些我们用了八位数码管时.分.秒之间采用了间隔号--。
在调试的过程中按键的控制我觉的是个难点。
之前的方案是用了两个外部中断和一个定时器中断来响应开关的,但是由于对外部中断不怎么懂,调了好久还是不能实现功能,只能响应两个开关。
之后找了资料,决定放弃这个方案。
采用了现在这个方案,就是通过t0定时器中断和t1计数中断。
七、课程设计心得
第一天拿到这个题目,我就想自己把它做出来.于是就去图书馆借了二本有关单片机仿真的书,大概花了一天时间把书上的一些有关数码管显示的程序看了一下,由于我借的书都是关于C的,汇编就不太懂.所以这次的程序是用C写的.在学习用C写程序的过程中也遇到了许多问题,很多细节上的东西都没注意.例如端口的字母要用大写,找这个错误让我很费劲.后来是问了同学才知道,很郁闷.在用八位共阳数码管时由于不了解内部结构.把位选的顺序当做是按顺序来的.其实不然.通过网上找资料才确定的各个引脚.程序的调试过程是最费劲的,总是会出现一些另我很难想通的结果.有时候程序不是按照你的思路来走的,只能一步步的慢慢调试.我这个过程中我觉的最让我困惑的是应用中断,是因为对中断的应用不清楚.尤其是要用到多个中断.不知道什么时候开,什么时候关中断.但是经过我这几天的努力学习,基本上对中断有些了解.内部中断我觉的还是相对简单些,外部中断要用到外部硬件难一些.在此这后我用外部中断写了一个秒表程序.用一个开关来控制启动,计时和暂停.
八、总结
通过这次课程设计是我了解了怎么应用51单片机,之前一直对单片机很感兴趣.但是只是想想从来没又动手去编写程序去控制单片机.这次课程设计让我受益匪浅,让我对单片机越来越来越感兴趣,但是我知道学习单片机的道路还是很长,这只是我迈出的第一步.我会坚持不懈的去学习它.
Ⅳ、主要参考质料:
3、董晓红,单片机原理及接口技术,西安电子科技大学出版社,2004
4、何立民,-51系列单片机应用系统设计配置与接口技术,
北京航空航天大学出版社。
2001
3李建总,单片机原理及应用,西安电子科技大学出版社,2002
4潘永雄,新编单片机原理与应用.西安:
西安电子科技大学出版社.2003
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 告交通灯控制器 交通灯 控制器