51单片机课程设计 汽车尾灯控制Word格式.docx
- 文档编号:3785736
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:14
- 大小:501.54KB
51单片机课程设计 汽车尾灯控制Word格式.docx
《51单片机课程设计 汽车尾灯控制Word格式.docx》由会员分享,可在线阅读,更多相关《51单片机课程设计 汽车尾灯控制Word格式.docx(14页珍藏版)》请在冰点文库上搜索。
最后发现是中断计数时间过短导致在处理按键时函数已经在中断里按键无法改变标志位,导致灯常亮的情况。
通过延长了进入中断时间,这个情况就完全解决了没有再出现常亮情况。
心得体会:
通过这次课程设计,是我对C语言处理实际问题的能力。
输入输出通过哟个好的程序框架才能很好的协作。
这也是C语言在处理硬件的好处。
也让我对单片机中断的理解,对程序的整体设计方面的学习正是我欠缺的地方。
通过这次让我很好的锻炼了自己。
这次课程设计也让我懂得了团队合作的实际意义。
特别是在程序出现了大问题,起初无法解决的,我们一起讨论一起查质料一起学习。
最后终于解决的了的喜悦真的很爽。
七原程序:
#include<
REG52.H>
intrins.h>
unsignedcharconstdiscode[]={0x30,0x06,0x00,0x73};
#defineconst_key_time120//按键去抖动延时的时间
#defineconst_key_time220//按键去抖动延时的时间
#defineconst_key_time320//按键去抖动延时的时间
#defineconst_key_time420//按键去抖动延时的时间
#defineconst_key_time520//按键去抖动延时的时间
#defineconst_display_time160//闪烁
#defineconst_display_time2120
voidinitial_myself();
voidinitial_peripheral();
//voiddelay_short(unsignedintuiDelayShort);
voiddelay_long(unsignedintuiDelaylong);
voidT0_time();
//定时中断函数
voidkey_service();
//按键服务的应用程序
voidkey_scan();
//按键扫描函数放在定时中断里
sbitkey_sr1=P2^0;
//左转键
sbitkey_sr2=P2^2;
//右转键
sbitkey_sr3=P2^1;
//转向归位键
sbitkey_sr4=P2^3;
//停车键
sbitleft=P2^6;
sbitright=P2^5;
unsignedcharucKeySec=0;
//被触发的按键编号
unsignedintuiKeyTimeCnt1=0;
//按键去抖动延时计数器
unsignedcharucKeyLock1=0;
//按键触发后自锁的变量标志
unsignedintuiKeyTimeCnt2=0;
unsignedcharucKeyLock2=0;
unsignedintuiKeyTimeCnt3=0;
unsignedcharucKeyLock3=0;
unsignedintuiKeyTimeCnt4=0;
unsignedcharucKeyLock4=0;
unsignedintuiLedTimeCnt1=0;
//闪烁计数器
unsignedintuiLedTimeCnt2=0;
unsignedintuiLedTimeCnt4=0;
uidisplayTimeCnt1=0;
//闪烁延时计数器
/*//根据原理图得出的共阴数码管字模表
codeunsignedchardig_table[]=
{
0x3f,//0序号0
0x06,//1序号1
0x5b,//2序号2
0x4f,//3序号3
0x66,//4序号4
0x6d,//5序号5
0x7d,//6序号6
0x07,//7序号7
0x7f,//8序号8
0x6f,//9序号9
0x00,//无序号10
0x40,//-序号11
0x73,//P序号12
};
*/
voidmain()
{
initial_myself();
delay_long(100);
initial_peripheral();
while
(1)
{
key_service();
}
}
voidkey_scan()//按键扫描函数放在定时中断里
{
if(key_sr1==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
ucKeyLock1=0;
//按键自锁标志清零
uiKeyTimeCnt1=0;
//按键去抖动延时计数器清零
elseif(ucKeyLock1==0)//有按键按下,且是第一次被按下
uiKeyTimeCnt1++;
//累加定时中断次数
if(uiKeyTimeCnt1>
const_key_time1)
ucKeyLock1=1;
//自锁按键置位,避免一直触发
ucKeySec=1;
//触发1号键
if(key_sr2==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
ucKeyLock2=0;
uiKeyTimeCnt2=0;
//按键去抖动延时计数器清?
elseif(ucKeyLock2==0)//有按键按下,且是第一次被按下
uiKeyTimeCnt2++;
if(uiKeyTimeCnt2>
const_key_time2)
ucKeyLock2=1;
ucKeySec=2;
//触发2号键
if(key_sr3==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
ucKeyLock3=0;
//uiKeyTimeCnt3=0;
elseif(ucKeyLock3==0)//有按键按下,且是第一次被按下
uiKeyTimeCnt3++;
if(uiKeyTimeCnt3>
const_key_time3)
uiKeyTimeCnt3=0;
ucKeyLock3=1;
ucKeySec=3;
//触发3号键
P1=discode[2];
left=0;
right=0;
if(key_sr4==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
ucKeyLock4=0;
uiKeyTimeCnt4=0;
elseif(ucKeyLock4==0)//有按键按下,且是第一次被按下
uiKeyTimeCnt4++;
if(uiKeyTimeCnt4>
const_key_time4)
ucKeyLock4=1;
ucKeySec=4;
//触发4号键
voidkey_service()//按键服务的应用程序
switch(ucKeySec)//按键服务状态切换
case1:
//左转按键
while(ucKeySec==1)
{
//uiLedTimeCnt1=0;
if(uiLedTimeCnt1>
const_display_time1)
{
P1=discode[0];
left=1;
if(uiLedTimeCnt1>
const_display_time2)
uiLedTimeCnt1=0;
}
else
{
P1=0x00;
left=0;
}
//ucKeySec=0;
//响应按键服务处理程序后,按键编号清零,避免一致触发
break;
case2:
//右转按键
while(ucKeySec==2)
//uiLedTimeCnt2=0;
if(uiLedTimeCnt2>
P1=discode[1];
right=1;
if(uiLedTimeCnt2>
uiLedTimeCnt2=0;
right=0;
}
case4:
while(ucKeySec==4)//停车按键
//uiLedTimeCnt4=0;
if(uiLedTimeCnt4>
P1=discode[3];
if(uiLedTimeCnt4>
uiLedTimeCnt4=0;
{right=0;
}}
//ucKeySec=0;
voidT0_time()interrupt1
TF0=0;
//清除中断标志
TR0=0;
//关中断
key_scan();
//按键扫描函数
//key_service();
uiLedTimeCnt1++;
//闪烁计数
uiLedTimeCnt2++;
uiLedTimeCnt4++;
TH0=0xf8;
//重装初始值(65535-500)=65035=0xfe0b
TL0=0x30;
TR0=1;
//开中断
voiddelay_long(unsignedintuiDelayLong)
unsignedinti;
unsignedintj;
for(i=0;
i<
uiDelayLong;
i++)
for(j=0;
j<
500;
j++)//内嵌循环的空指令数量
;
//一个分号相当于执行一条空语句
voidinitial_myself()//第一区初始化单片机
P2=0xff;
P1=0x00;
TMOD=0x01;
//设置定时器0为工作方式1
voidinitial_peripheral()//第二区初始化外围
EA=1;
//开总中断
ET0=1;
//允许定时中断
//启动定时中断
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51单片机课程设计 汽车尾灯控制 51 单片机 课程设计 汽车 尾灯 控制
![提示](https://static.bingdoc.com/images/bang_tan.gif)