单片机课程论文.docx
- 文档编号:6189433
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:18
- 大小:113KB
单片机课程论文.docx
《单片机课程论文.docx》由会员分享,可在线阅读,更多相关《单片机课程论文.docx(18页珍藏版)》请在冰豆网上搜索。
单片机课程论文
交通灯控制器的设计
一、实验目的
掌握单片机最小系统构成,单片机定时/计数器的工作原理,中断系统的特点,显示器、按键的接口原理,以及综合应用程序的设计方法。
二、实验要求
设计一个以单片机为核心的交通灯控制器,用于控制十字路口的信号灯按指定规律变化。
信号灯分东西方向和南北方向,每个方向各有一组红、黄、绿信号灯。
信号灯的状态变化规律如表1所示。
表1交通灯的状态表
序号
状态
东西信号灯
南北信号灯
时间
说明
红
黄
绿
红
黄
绿
0
加电后起始状态
灭
闪
灭
灭
闪
灭
5秒
黄灯双闪
1
东西通行
灭
灭
亮
亮
灭
灭
25秒
东西绿南北红
2
换向提示
灭
闪
灭
亮
灭
灭
5秒
东西黄南北红
3
南北通行
亮
灭
灭
灭
灭
亮
25秒
东西红南北绿
4
换向提示
亮
灭
灭
灭
闪
灭
5秒
东西红南北黄
1、基本要求
用发光二极管模拟信号灯,使用LED数码管作倒计时显示器,实现表1要求,设计相应硬件、软件,并写出实验报告。
2、创新要求
1)通过按键进入紧急状态、黄灯双闪状态等;
2)数码管上显示通行状态的示意符号;
3)状态时间可以通过按键或遥控设置;
4)更改成更实用的通行规则或其它有实用意义的创新;
5)制作实物。
三、实验方案
由软件设置交通灯的初始时间,南北方向通行25秒,东西方向通行25秒,数码管采用动态显示,P0口送字形码,P2口送字位选通信号,通过单片机的P1口控制各种信号灯的燃亮与熄灭。
采用中断方式实现按键的功能,如图1所示。
图1工作原理图
四、实现基本要求的软硬件设计
单片机最小系统以80S52为核心,外加时钟和复位电路,电路结构简单,抗干扰能力强,成本相对较低,非常符合本设计的所有要求。
89C51单片机系列是MCS-51系列的基础上发展起来的,是当前8位单片机的典型代表,采用CHMOS工艺,即互补金属氧化物的HMOS工艺,CHMOS是CMOS和HMOS的结合,具有HMOS高速度和高密度的特点,还具有CMOS低功耗的特点。
复位电路分为上电自动复位和按键手动复位,RST引脚是复位信号的输入端,复位信号是高电平有效.上电自动复位通过电容C1和电阻R4来实现,按键手动复位是图中复位键来实现的。
图2电路原理图
1、时间显示电路设计
因为系统要求南北和东西方向的信号灯时间不一样,所以就利用单片机的P0口送出数据的段码,位选信号用P2口送出,用动态扫描的方法显示东西、南北的倒计时间(如图4.3.1所示)。
数码管使用共阴数码管,需要接上470欧上拉电阻以提供足够大的电流来驱动数码管,数码管的每段的电流是约10毫安。
图3时间显示电路
2、交通灯显示电路设计
本设计利用单片机的p1口来驱动和控制各种信号灯的燃亮和燃亮时间,在实际中,交通灯的信号灯需要用高电压控制,在这里我只是模拟一下它的控制信号,所以我就只用单片机的信号引脚直接来控制发光二极管(如图-4所示)
图4交通灯显示电路
(二)软件设计
1、主程序设计
图五主程序框图
2、总体流程图(实现各种状态间的转换):
图六总体流程图
3、交通灯运行状态
4、相关参数计算
T0的计数初值:
X=216-12*50*1000/12=15536=3CB0H
5、程序流程图
6、程序代码
/*#include
#include
#defineucharunsignedchar/*定义字符串类型为无符号型*/
ucharcodea[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
ucharcodeb[4]={0x0D,0x0E,0x07,0x0B};/****P2口,低有效*/
ucharcodec[4]={0xDE,0xDD,0xF3,0xEB};/****P1口,低有效*/
charSN=25,WE=25;
charSN_G=25,WE_G=15,Y=5;
uchari,k=0,count=0;
voiddelay(uchart);/*定义函数*/
voidlight();/*定义函数*/
voidled();/*定义函数*/
sbitK0=P3^7;/*开关K0接P3^7管脚*/
sbitK1=P3^6;/*开关K1接P3^6管脚*/
sbitK2=P3^3;/*开关K2接P3^3管脚*/
sbitK3=P3^5;/*开关K3接P3^5管脚*/
sbitK4=P3^2;/*开关K4接P3^2管脚*/
/*程序初始化*/
voidinit(void)
{
/*12MHz*/
TMOD=0x01;/**计数器用模式1,为16位计数器*****/
TH1=(65536-50000)/256;/*0x3C*/
TL1=(65536-50000)%256;/*0xB0*//*计50000个数,用时50ms*/
IT0=1;/*外部中断0为边沿触发方式*/
ET0=1;/*允许T0中断*/
TR0=1;/*启动计数器*/
EA=1;/*CPU开放总中断*/
EX0=1;/*允许外部中断0中断,即允许响应端口P3^2(K4)中断*/
EX1=1;/*允许外部中断1中断,即允许响应端口P3^3(K2)中断*/
}
/*中断0处理程序*/
voidint0(void)interrupt0
{
EA=0;/*CPU禁止响应一切中断*/
P1=0xDB,P0=a[0];/*东西南北方向均红灯亮,P0口输出0*/
for(;;)/*无条件循环*/
{
P2=b[0],P0=a[(SN_G+Y)%10];/*南北方向数码管显示可通行时间的个位*/
delay(5);/*延时*/
P2=b[1],P0=a[(SN_G+Y)/10];/*南北方向数码管显示可通行时间的十位*/
delay(5);/*延时*/
P2=b[2],P0=a[(WE_G+Y)%10];/*东西方向数码管显示可通行时间的个位*/
delay(5);/*延时*/
P2=b[3],P0=a[(WE_G+Y)/10];/*东西方向数码管显示可通行时间的十位*/
delay(5);/*延时*/
/*设置南北方向通行时间*/
if(K0==0)/*P3^7=0*/
{
delay(10);/*延时,把抖动的时间抛掉*/
if(K0==0)
{
while(!
K0)/*当松开K0开关时,跳出空循环,执行后面的程序*/
{
}
SN_G++;/*南北方向绿灯时间+1*/
if(SN_G==100)
SN_G=0;/*由于使用的是两位数码管,当南北方向绿灯时间加到100后清零*/
}
}
/*设置东西方向通行时间*/
if(K1==0)/*P3^6=0*/
{
delay(10);/*延时,把抖动的时间抛掉*/
if(K1==0)
{
while(!
K1)/*当松开K1开关时,跳出空循环,执行后面的程序*/
{
}
WE_G++;/*东西方向绿灯时间+1*/
if(WE_G==100)
WE_G=0;/*由于使用的是两位数码管,当东西方向绿灯时间加到100后清零*/
}
}
/*返回*/
if(K3==0)/*P3^5=0*/
{
delay(10);/*延时,把抖动的时间抛掉*/
if(K3==0)
{
while(!
K3)/*当松开K3开关时,跳出空循环,执行后面的程序*/
{
}
count=0;/*清零*/
k=0;/*南北方向通车,东西方向不通车*/
SN=SN_G,WE=SN_G+Y;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/
light();/*调用交通灯函数*/
led();/*调用数码管函数*/
EA=1;/*CPU开放总中断*/
break;/*跳出*/
}
}
}
}
/*中断1处理程序*/
voidint1(void)interrupt2
{
P1=0xDB,P0=a[0];/*东西南北方向均红灯亮,P0口输出0*/
EA=0;/*CPU禁止响应一切中断*/
TR0=!
TR0;/*计数器停止工作*/
for(;;)/*无条件循环*/
{
/*数码管扫描程序,*/
P2=b[0];/*显示南北方向个位*/
delay(5);/*延时*/
P2=b[1];/*显示南北方向十位*/
delay(5);/*延时*/
P2=b[2];/*显示东西方向个位*/
delay(5);/*延时*/
P2=b[3];/*显示东西方向十位*/
delay(5);/*延时*/
/*返回*/
if(K3==0)/*P3^5=0*/
{
delay(10);/*延时,把抖动的时间抛掉*/
if(K3==0)
{
while(!
K3)/*当松开K3开关时,跳出空循环,执行后面的程序*/
{
}
EA=1;/*CPU开放总中断*/
TR0=!
TR0;/*启动计数器*/
break;/*跳出*/
}
}
}
}
/*键盘程序*/
voidkey()
{
/*南北有车而东西无车*/
if(K0==0)/*K0=0*/
{
delay(10);/*延时,把抖动的时间抛掉*/
if(K0==0)
{
while(!
K0)/*当松开K0开关时,跳出循环,执行后面的程序*/
{
light();/*调用交通灯函数*/
led();/*调用数码管函数*/
}
count=0;/*清零*/
k=0;/*南北方向通车,东西方向不通车*/
SN=SN_G,WE=SN_G+Y;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/
light();/*调用交通灯函数*/
led();/*调用数码管函数*/
}
}
/*南北无车而东西有车*/
if(K1==0)/*K1=0*/
{
delay(10);/*延时,把抖动的时间抛掉*/
if(K1==0)
{
while(!
K1)/*当松开K1开关时,跳出循环,执行后面的程序*/
{
light();/*调用交通灯函数*/
led();/*调用数码管函数*/
}
count=0;/*清零*/
k=2;/*南北方向不通车,东西方向通车*/
SN=WE_G+Y,WE=WE_G;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东西方向显示时间为东西方向绿灯通行时间*/
light();/*调用交通灯函数*/
led();/*调用数码管函数*/
}
}
}
/*定时函数*/
voidtime1(void)interrupt1
{
TH0=0x3c;
TL0=0xb0;/*计50000个数,用时50ms*/
count++;/*自增运算*/
if(count>=20)/*当count大于或等于20时,历时1s,执行程序*/
{
SN--;/*自减运算*/
WE--;/*自减运算*/
count=0;/*清零*/
if(SN==0||WE==0)/*当SN=0或者WE=0时,执行程序*/
{
k++;/*自增运算*/
if(k>3)/*当k>3时,执行程序*/
k=0;/*清零*/
switch(k)/*switch语句*/
{
case0:
SN=SN_G,WE=SN_G+Y;break;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/
case1:
SN=Y,WE=Y;break;/*东西南北方向显示时间均为黄灯闪亮时间*/
case2:
SN=WE_G+Y,WE=WE_G;break;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东西方向显示时间为东西方向绿灯通行时间*/
case3:
SN=Y,WE=Y;break;/*东西南北方向显示时间均为黄灯闪亮时间*/
}
}
}
}
/*延时t毫秒*/
voiddelay(uchart)
{
uchari;
for(t;t>0;t--)
{
for(i=2000;i>0;i--)
{}
}
}
/*交通灯函数*/
voidlight()
{
P1=c[k];/*交通灯对应着k的值变化*/
if(P1==c[1]&&count==0)/*当南北方向亮黄灯且count=0时,执行程序*/
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;/*延时50ms*/
P1=0xDF;/*南北方向黄灯熄灭,东西方向亮红灯*/
}
else
if(P1==c[3]&&count==0)/*当东西方向亮黄灯且count=0时,执行程序*/
{
TH1=(65536-300000)/256;
TL1=(65536-300000)%256;/*延时50ms*/
P1=0xFB;/*南北方向亮红灯,东西方向黄灯熄灭*/
}
}
/*数码管函数*/
voidled()
{
P2=b[0],P0=a[SN%10];/*显示南北方向个位*/
delay(5);/*延时*/
P2=b[1],P0=a[SN/10];/*显示南北方向十位*/
delay(5);/*延时*/
P2=b[2],P0=a[WE%10];/*显示东西方向个位*/
delay(5);/*延时*/
P2=b[3],P0=a[WE/10];/*显示东西方向十位*/
delay(5);/*延时*/
}
/*主函数*/
voidmain(void)
{
init();/*调用程序初始化函数*/
for(;;)/*无条件循环*/
{
key();/*调用键盘程序*/
light();/*调用交通灯函数*/
led();/*调用数码管函数*/
}
}
五、实验总结
1、实现的基本功能
通过设计与调试,实现了实验要求中的信号灯按要求亮灭以及用数码管显示倒计时时间两项基本功能。
2、实现的创新
(1)状态时间可以通过按键设置
(2)通过按键进入紧急状态(东西南北均亮红灯)
六、心得体会
通过这次交通灯的课程设计,使我得到了一次用知识、技能分析和解决现实问题的能力。
使我在单片机的基本原理、单片机应用学习过程中,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为一名合格的应用型人才打下良好的基础。
综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更深层次的理解和认识。
在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流得到解决。
由于本人的水平有限,设计中难免会有一些不合理的部分,系统的稳定性还有待提高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程 论文