欢迎来到天天文库
浏览记录
ID:57311552
大小:44.50 KB
页数:14页
时间:2020-08-11
《AVR单片机软件设计(proteus).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、南京邮电大学2012/2013学年第一学期软件设计实验报告模块名称AVR单片机软件设计(proteus)专业学生班级学生学号学生姓名指导教师李虹戴海鸿杨洁王明伟设计题目(填写内容字体为宋体小四)任务要求(填写内容字体为宋体小四)实验设备及软件(填写内容字体为宋体小四)ICCAVR和proteus以及包含的虚拟示波器电压表等参考文献(填写内容字体为宋体小四)Atmega128说明书ICCAVR编程手册ICCAVR用户手册Proteus入门教程AVR单片机c语言库C语言设计AVR单片机软件设计(proteus)报告一、设计原理思路
2、交通灯作为日常常见的交通设施,是我们生活中必不或缺的重要交通指示器;为正常的交通通行起到了很大的作用;本课题设计了一个智能交通灯,不仅仅起到了普通的交通灯作用,还能够根据特殊情况进行特殊处理;通过八个按键实现,东西通行、南北通行、时间设置确定、加、减、紧急车报警、故障车报警、盲人通行功能,这样更加人性化,适应突发事件的应急处理功能;为交通的正常通行和突发事件的处理提高了很大的效率;本课题硬件配置1.通过低电平触发设置了8个普通按键,实现不同的功能;2.PE0口装置了一个报警,实现报警的功能;3.12个口配置了led灯,实现红绿
3、灯;4.同时配置了两位数码管显示时间的倒计时;软件配置1.通过配置定时器0:普通计时模式,普通端口操作,预分频为256;实现1s的计时器功能;同时开启定时器中断,在中断函数里进行计时,这样不会影响其它按键功能函数的执行;2.按键扫描放在while循环里,不断扫描,实现相应功能;3.按键功能函数配置了各个功能,同时结合定时器实现时间的刷新显示;4.有突发事件时,通过开启关闭定时器来决定计数;二、硬件原理图三、软件方面程序流程图的设计、代码介绍//包含单片机型号头文件#include//包含"位"操作头文件#
4、include#defineucharunsignedchar#defineuintunsignedint//定义按键位置//东西通行#definekey00//南北通行#definekey11//时间设置确定#definekey22//加#definekey33//减#definekey44//紧急车报警#definekey55//故障车报警#definekey66//盲人通行#definekey77//tt=65时,为1suinttt;uchari=0,j;//时间倒计时变量uchartemp=0;//
5、通行时间变量;初始值20秒;uchartx_time=20;//显示的变量;uchartab[2]={0,1};//是否为设置通行时间变量;set=1,设置通行时间;set=0;正常通行;ucharset;ucharbojing;//定义共阴数码管码值ucharTable[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};//延时函数msvoidDelayMs(uchari){ucharj;for(;i>0;i--){for(j=0;j<250;j++);
6、}}//定时器0初始化配置voidTimer0_Init(void){TCCR0
7、=(1<8、=(1<9、键时;正常显示倒计时变量tempif(set==0){tab[0]=temp/10;tab[1]=temp%10;}//set=1时;闪烁显示通行时间值else{if(tt>32){tab[0]=tx_time/10;tab[1]=tx_time%10;}//通行时间值送显示else{tab[0]=10;tab[1]=10;}//关显示}for(i=0;i<2;i++)//要显示的位数{PORTA=0Xfd;//第二位开始显示PORTB=Table[tab[0]];//改变tab[]的值将得到您要显示的字符DelayMs(5)10、;//延时PORTA=0Xfe;//第一位显示PORTB=Table[tab[1]];//改变tab[]的值将得到您要显示的字符DelayMs(5);//延时}}//延时函数voiddelay(uintt){while(--t);}//延时函数voiddelay3ms(voi
8、=(1<9、键时;正常显示倒计时变量tempif(set==0){tab[0]=temp/10;tab[1]=temp%10;}//set=1时;闪烁显示通行时间值else{if(tt>32){tab[0]=tx_time/10;tab[1]=tx_time%10;}//通行时间值送显示else{tab[0]=10;tab[1]=10;}//关显示}for(i=0;i<2;i++)//要显示的位数{PORTA=0Xfd;//第二位开始显示PORTB=Table[tab[0]];//改变tab[]的值将得到您要显示的字符DelayMs(5)10、;//延时PORTA=0Xfe;//第一位显示PORTB=Table[tab[1]];//改变tab[]的值将得到您要显示的字符DelayMs(5);//延时}}//延时函数voiddelay(uintt){while(--t);}//延时函数voiddelay3ms(voi
9、键时;正常显示倒计时变量tempif(set==0){tab[0]=temp/10;tab[1]=temp%10;}//set=1时;闪烁显示通行时间值else{if(tt>32){tab[0]=tx_time/10;tab[1]=tx_time%10;}//通行时间值送显示else{tab[0]=10;tab[1]=10;}//关显示}for(i=0;i<2;i++)//要显示的位数{PORTA=0Xfd;//第二位开始显示PORTB=Table[tab[0]];//改变tab[]的值将得到您要显示的字符DelayMs(5)
10、;//延时PORTA=0Xfe;//第一位显示PORTB=Table[tab[1]];//改变tab[]的值将得到您要显示的字符DelayMs(5);//延时}}//延时函数voiddelay(uintt){while(--t);}//延时函数voiddelay3ms(voi
此文档下载收益归作者所有