汽车单片机原理程序复习.doc
《汽车单片机原理程序复习.doc》由会员分享,可在线阅读,更多相关《汽车单片机原理程序复习.doc(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流汽车单片机原理程序复习.精品文档.第 01 篇 基础程序设计01闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁#include#define uchar unsigned char#define uint unsigned intsbit LED=P10;/延时void DelayMS(uint x)uchar i;while(x-)for(i=0;i120;i+);/主程序void main()while(1)LED=LED;DelayMS(150);02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的
2、8个LED从左到右循环依次点亮,产生走马灯效果#include#include#define uchar unsigned char#define uint unsigned int/延时void DelayMS(uint x)uchar i;while(x-)for(i=0;i120;i+);/主程序void main()P0=0xfe;while(1)P0=_crol_(P0,1); /P0的值向左循环移动DelayMS(150);03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果#include#inclu
3、de#define uchar unsigned char#define uint unsigned int/延时void DelayMS(uint x)uchar i;while(x-)for(i=0;i120;i+);/主程序void main()uchar i;P2=0x01;while(1)for(i=0;i7;i+)P2=_crol_(P2,1); /P2的值向左循环移动DelayMS(150);for(i=0;i7;i+)P2=_cror_(P2,1); /P2的值向右循环移动DelayMS(150);04 单只数码管循环显示09/*名称:单只数码管循环显示09说明:主程序中的循环
4、语句反复将09的段码送至P0口,使数字09循环显示#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/延时void DelayMS(uint x)uchar t;while(x-) for(t=0;t120;t+);/主程序void main()uchar i=0;P0=0x00;while(1) /* for(;i11;i+) P0=DSY_CODEi; De
5、layMS(300); /注:另一方案 */P0=DSY_CODEi;i=(i+1)%10;DelayMS(300);05 8只数码管滚动显示单个数字/*名称:8只数码管滚动显示单个数字说明:数码管从左到右依次滚动显示07,程序通过每次仅循环选通一只数码管#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/延时void DelayMS(uint x)uchar t;whi
6、le(x-) for(t=0;t120;t+);/主程序void main()uchar i,wei=0x80;while(1)for(i=0;i8;i+)P2=0xff; /关闭显示wei=_crol_(wei,1);P0=DSY_CODEi; /发送数字段码P2=wei; /发送位码DelayMS(300);06 8只数码管动态显示多个不同字符电路如上图/*名称:8只数码管动态显示多个不同字符说明:数码管动态扫描显示07。#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY_CO
7、DE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/延时void DelayMS(uint x)uchar t;while(x-) for(t=0;t120;t+);/主程序void main()uchar i,wei=0x80;while(1)for(i=0;i8;i+)P2=0xff;P0=DSY_CODEi; /发送段码wei=_crol_(wei,1);P2=wei; /发送位码DelayMS(2);7 K1-K4 按键状态显示/*名称:K1-K4 按键状态显示说明:K1、K2按下时LED点亮,松开时熄灭, K3、K4按下并释放时
8、LED点亮,再次按下并释放时熄灭;#include#define uchar unsigned char#define uint unsigned intsbit LED1=P00;sbit LED2=P01;sbit LED3=P02;sbit LED4=P03;sbit K1=P10;sbit K2=P11;sbit K3=P12;sbit K4=P13;/延时void DelayMS(uint x)uchar i;while(x-) for(i=0;i120;i+);/主程序void main()P0=0xff;P1=0xff;while(1)LED1=K1;LED2=K2;if(K3=
9、0)while(K3=0);LED3=LED3;if(K4=0)while(K4=0);LED4=LED4;DelayMS(10);8 开关控制LED/*名称:开关控制LED说明:开关S1和S2分别控制LED1和LED2。#includesbit S1=P10;sbit S2=P11;sbit LED1=P00;sbit LED2=P01;/主程序void main()while(1)LED1=S1;LED2=S2;9 按键发音/*名称:按键发音说明:按下不同的按键会是SOUNDER发出不同频率的声音。本例使用延时函数实现不同频率的声音输出,以后也可使用定时器#include#define u
10、char unsigned char#define uint unsigned intsbit BEEP=P37;sbit K1=P14;sbit K2=P15;sbit K3=P16;sbit K4=P17;/延时void DelayMS(uint x)uchar t;while(x-) for(t=0;t120;t+);/按周期t发音void Play(uchar t)uchar i;for(i=0;i100;i+)BEEP=BEEP;DelayMS(t);BEEP=0;void main()P1=0xff;BEEP=0;while(1)if(K1=0)Play(1);if(K2=0)Pl
11、ay(2);if(K3=0)Play(3);if(K4=0)Play(4);10 INT0中断计数/*名称:INT0中断计数说明:每次按下计数键时触发INT0中断,中断程序累加计数, 计数值显示在3只数码管上,按下清零键时数码管清零#include#define uchar unsigned char#define uint unsigned int/09的段码uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;/计数值分解后各个待显示的数位uchar DSY_Buffer=0,0,0;uchar
12、 Count=0;sbit Clear_Key=P36;/数码管上显示计数值void Show_Count_ON_DSY()DSY_Buffer2=Count/100;/获取3个数DSY_Buffer1=Count%100/10;DSY_Buffer0=Count%10;if(DSY_Buffer2=0) /高位为0时不显示DSY_Buffer2=0x0a;if(DSY_Buffer1=0) /高位为0,若第二位为0同样不显示DSY_Buffer1=0x0a;P0=DSY_CODEDSY_Buffer0;P1=DSY_CODEDSY_Buffer1;P2=DSY_CODEDSY_Buffer2
13、;/主程序void main()P0=0x00;P1=0x00;P2=0x00;IE=0x81;/允许INT0中断IT0=1;/下降沿触发while(1)if(Clear_Key=0) Count=0;/清0Show_Count_ON_DSY();/INT0中断函数void EX_INT0() interrupt 0Count+; /计数值递增11 外部INT0中断控制LED/*名称:外部INT0中断控制LED说明:每次按键都会触发INT0中断,中断发生时将LED状态取反,产生LED状态由按键控制的效果#include#define uchar unsigned char#define uin
14、t unsigned intsbit LED=P00;/主程序void main()LED=1;EA=1;EX0=1;IT0=1;while(1);/INT0中断函数void EX_INT0() interrupt 0LED=LED; /控制LED亮灭12 定时器控制单只LED/*名称:定时器控制单只LED说明:LED在定时器的中断例程控制下不断闪烁。#include#define uchar unsigned char#define uint unsigned intsbit LED=P00;uchar T_Count=0;/主程序void main()TMOD=0x00; /定时器0工作方
15、式0TH0=(8192-5000)/32;/5ms定时TL0=(8192-5000)%32;IE=0x82;/允许T0中断TR0=1;while(1);/T0中断函数void LED_Flash() interrupt 1TH0=(8192-5000)/32;/恢复初值TL0=(8192-5000)%32;if(+T_Count=100)/0.5s开关一次LEDLED=LED;T_Count=0; 13 定时器控制4个LED滚动闪烁/*名称:定时器控制4个LED滚动闪烁说明:4只LED在定时器控制下滚动闪烁。#include#define uchar unsigned char#define
16、uint unsigned intsbit B1=P00;sbit G1=P01;sbit R1=P02;sbit Y1=P03;uint i,j,k;/主程序void main()i=j=k=0;P0=0xff;TMOD=0x02; /定时器0工作方式2TH0=256-200;/200us定时TL0=256-200;IE=0x82;TR0=1;/启动定时器while(1);/T0中断函数void LED_Flash_and_Scroll() interrupt 1if(+k35)return; /定时中断若干次后执行闪烁k=0;switch(i)case 0:B1=B1;break;case
17、 1:G1=G1;break;case 2:R1=R1;break;case 3:Y1=Y1;break;default:i=0;if(+j300) return; /每次闪烁持续一段时间j=0;P0=0xff; /关闭显示i+; /切换到下一个LED14 10s的秒表/*名称:10s的秒表说明:首次按键计时开始,再次按键暂停,第三次按键清零。#include#define uchar unsigned char#define uint unsigned intsbit K1=P37;uchar i,Second_Counts,Key_Flag_Idx;bit Key_State;uchar
18、DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/延时void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t120;t+);/处理按键事件void Key_Event_Handle()if(Key_State=0)Key_Flag_Idx=(Key_Flag_Idx+1)%3;switch(Key_Flag_Idx)case 1:EA=1;ET0=1;TR0=1;break;case 2:EA=0;ET0=0;TR0=0;break;case 0:P0=0x3f;P2=0x3f;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汽车 单片机 原理 程序 复习
限制150内