文档介绍:该【单片机整套实验及程序(交通灯 跑马灯等) 】是由【taotao0a】上传分享,文档一共【92】页,该文档可以免费在线阅读,需要了解更多关于【单片机整套实验及程序(交通灯 跑马灯等) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
试验1跑马灯试验
一、试验目的
初步学会ProteusISIS和uVision2单片机集成开发环境的使用;
初步把握接受汇编语言与C语言开发单片机系统的程序结构;
把握80C51单片机通用I/O口的使用;
把握单片机内部定时/计数器的使用及编程方法以及中断处理程序的编写方法。
二、试验设备及器件
硬件:PC机,HNIST-1型单片机试验系统
软件:ProteusISIS单片机仿真环境,uVision2单片机集成开发环境
三、试验内容
编写一段程序,接受P1口作为把握端口,使与P1口相接的四个发光二极管(D1、D2、D3、D4)依据肯定的方式点亮。如点亮方式为:先点亮D1,延时一段时间,再挨次点亮D2……D4,然后又是D4……D1,同时只能有一个灯亮;然后每隔一段时间一次使相邻两个灯亮,三个灯亮,四个灯亮,最终闪烁三次,接着循环变化。
基于ProteusISIS仿真环境完成上述功能的仿真。
基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行。
四、试验原理图
,~,发光二极管依据肯定次序发光,相邻发光二极管的发光时间间隔可以通过定时器把握,还可以通过软件延时实现。
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
五、软件流程图与参考程序
主程序流程图如下:
开始
初始化(定时器、中断、标志位设置)
Flag=1?
流水灯操作
结束
Y
N
参考程序
#include<>
#include<>
#defineucharunsignedchar
#defineuintunsignedint
ucharaa,num,speed,flag;
ucharcodetable[]={0x0e,0x0d,0x0b,0x07};
ucharcodetable1[]={0x0a,0x05,0x09,0x06};
ucharcodetable2[]={0x0c,0x09,0x03,0x08,0x01,0x0e,0x0c,0x08,0x00};
voiddelay(uintz)//延时函数
{
uintx;
uchary;
for(x=z;x>0;x--)
for(y=200;y>0;y--);
}
voidinit()//条件初始化函数
{ flag=0;
speed=10;//把握跑马灯流水速度
TMOD=0x01;//中断方式
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
TH0=(65535-50000)/256;
TL0=(65536-50000)%256;//初值
EA=1;//打开总中断
ET0=1;//打开外中断0
TR0=1;
}
voidmain()
{
init();//调用初始化函数
while(1)
{
if(flag)
{
delay(2000);//调用延时函数
for(num=0;num<4;num++)//从左至右间隔一个依次闪烁
{
P1=table[num];
delay(2000);
}
for(num=3;num>0;num--)//从左至右间隔一个依次闪烁
{
P1=table[num];
delay(2000);
}
for(num=0;num<4;num++)//从左至右间隔两个依次闪烁
{
P1=table1[num];
delay(2000);
}
for(num=3;num>0;num--)//从左至右间隔两个依次闪烁
{
P1=table1[num];
delay(2000);
}
for(num=0;num<6;num++)//两个,三个,四个跑马灯依次闪烁
{
P1=table2[num];
delay(2000);
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
}
for(num=0;num<5;num++)//闪烁5次
{
P1=0xff;//全暗
delay(2000);
P1=0X00;//全亮
delay(2000);}
speed=speed-3;//变速
if(speed==4)
{speed=10;}
}
}
}
voidtimer0()interrupt1//中断函数
{
TH0=(65535-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==speed)
{
aa=0;
flag=1;
}
}
六、试验思考题
请用汇编指令完成本试验内容,深刻理解汇编语言程序设计结构。
在本试验中,I/O口作为输出口使用,假如把I/O口的某些口线作为输入口使用时,如何获得输入引脚状态?请举例说明。
在画软件流图时,各种不同形式方框意义是否相同?请举例示之。
请简要叙述中断服务程序功能并画出其流程图。
在接受I/O口作为输出口时要考虑哪些因素?假如负载变化,如何设计单片机与负载之间的接口电路?
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
试验2交通灯试验
一、试验目的
进一步把握ProteusISIS和uVision2单片机集成开发环境的使用;
进一步把握单片机内部定时/计数器的使用及编程方法以及中断处理程序的编写方法
把握单片机的I/O口编程使用。
二、试验设备及器件
硬件:PC机,HNIST-1型单片机试验系统,USB下载线一根、连接线若干
软件:ProteusISIS单片机仿真环境,uVision2单片机集成开发环境
三、试验内容
编写一段程序,实现用单片机的I/O口把握12个发光二极管(四组,每组有红绿蓝三个发光二极管),使发光二极管依据肯定的规章模拟交通灯功能。
基于ProteusISIS仿真环境完成上述功能的仿真。
基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行。
四、试验原理
用单片机的IO口把握4组红绿蓝共12个发光二极管,使发光二极管依据肯定规章与次序发光与闪亮以实现模拟交通灯的功能。假设初始状态为:(南北通行状态)南北绿灯、东西红灯(25s);后转为过度状态:南北黄灯、东西红灯(5s);再转为东西通行状态:东西绿灯、南北红灯25(s)。再转为过渡状态:东西黄灯、南北红灯(5s),然后循环往复。
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
。,所以在电源与二极管之间加一个电阻,目的是爱护二极管;试验中利用定时计数器实现1S的定时,然后在此基础上实现所需要的定时时间。
五、软件流程图与参考源程序
软件设计思想:在编程时,我们一般把一个独立的功能设计成一个子程序或者说函数。对于不同的设计者而言,对软件功能的划分角度不同,对应的函数功能也存在差异。
开始
南北绿灯东西红灯25
南北黄灯东西红灯5
东西绿灯南北红灯25
东西黄灯南北红灯5
结束
定时器
参考源程序如下:
#include<>//头文件
#defineuintunsignedint
#defineucharunsignedchar//定义下便利使用
sbitkong=P1^4;//位声明数码管锁存把握端
ucharcodetable[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//数字0-9编码
uinttt,temp=0;
/************************************************
延时函数
**************************************************/ voiddelay(uintx)
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
{
uchari,k;
for(i=0;i<x;i++)
for(k=0;k<100;k++)
;
}
/**************************************************
初始化函数
***************************************************/
voidinit()
{
temp=0;
tt=0;
TMOD=0x01;//定时器工作方式
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//装初值
EA=1;//开总中断
ET0=1;//开定时器中断
TR0=1;//启动定时器中断
}
/*************************************************
数码管显示函数
*************************************************/
voiddisplay(uintx1)
{
uchari,c;
uintcod[4];
cod[3]=x1/1000;
cod[2]=x1%1000/100;
cod[1]=x1%1000%100/10;
cod[0]=x1%10;//求个数码管的值
c=0x01;
for(i=0;i<4;i++)
{
P1=c;//数码管的显示选择
P0=table[cod[i]];//送要显示的值
kong=1;//打***存
c=c<<1;//左移一位选择下一个数码管
kong=0;//关闭锁存
delay(10);
}
}
/****************************************
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
交通灯驱动函数
*****************************************/
voidjiaotong()
{ //uintt=0;
if(temp==0)
temp=60;//给temp装值,也即是交通灯循环一次要的时间
if(temp>30)
{
if(temp<=35)
{
display(temp-30);
P2=0Xf5;//南北黄灯、东西红灯(5s)
}
else
{
display(temp-30);
P2=0xdd;//南北绿灯、东西红灯(25s)
}
}
else
{if(temp<=5)
{
display(temp);
P2=0xee;//东西黄灯、南北红灯(5s)
}
else
{
display(temp);
P2=0xeb;//东西绿灯、南北红灯25(s)
}
}
if(tt==20)//推断时间是否过了1s
{
tt=0;
temp--;//倒计数
}
}
/************************************************
主函数
************************************************/
voidmain()
{
init();//初始化函数调用
while(1)//主循环
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
{
jiaotong();//交通灯函数调用
}
}
//中断函数
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//重新装初值
tt++;
}
六、试验思考题
如何实现扩充功能,实现抢救车优先通过十字路口?请叙述硬件设计与软件设计原理。
在利用单片机片内定时器实现精确定时时,是否会产生误差?假如存在误差请分析误差产生缘由以及减小误差方法。
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
单片机整套试验及程序(交通灯_跑马灯等)
试验3数码管动态显示试验
一、试验目的
l把握数码管静态显示与动态显示原理以及数码管与单片机的接口原理。
l学会利用单片机的I/O口实现数码管的动态显示。
二、试验仪器
l硬件:PC机、HNIST-1型单片机试验系统
l软件:ProteusISIS单片机仿真环境,uVision2单片机集成开发环境
三、试验内容
l编写一段程序,接受P1口某些口线作为4位数码管的位把握端;接受P0口输出段码,实现4位数码管的测试(让4位数码管同时输出0~F);
l编写程序,让4位数码管循环显示1—2—3—4(即让第一位显示”1”,然后第一位熄灭,其次位显示”2”……)
四、试验原理
使用LED数码显示器时,要留意区分数码管两种不同的接法(共阴LED和共阳LED),为了显示数字或字符,必需对数字或字符进行编码。七段数码管加上一个小数点,共计8段,因此为LED显示器供应的编码正好是一个字节。。对于共阴接法,要使某位LED显示相应数码,则使LED的对应段点亮,则对应把握电平为高,如:要显示数字”0”,假如a~~,则LED的a,b,c,,d,e,f需点亮,对应驱动电平为”1”,其他为”0”,则对应数码”0”的段码为”FCH”。
共阴极共阳极
LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特
点是每个数码管的段码必需需要一个数据锁存器锁存,当送入字形码后,显示字形可始终保持,直到送入新字形码为止,显示亮度较强。而动态显示是多个LED轮番显示,但由于人眼的视觉惰性,使人感觉各LED同时显示不同字符。