资源简介 (共14张PPT)实例15 倒车警示器《单片机基础与应用(C语言版)》高等教育出版社PART 01一、任务导入任务要求要求用一个开关做为“倒车”挡控制开关,2个黄色的LED做为汽车尾部倒车警示灯,控制电路中再接入一个蜂鸣器。当“倒车”开关闭合时,汽车发出倒车警示信号——通过蜂鸣器发出警示音,并且2个LED不停地闪烁发出黄色警示灯光。PART 02二、任务分析使用单片机做为控制器实现倒车警示器设计。将“倒车”挡控制开关SW接入P0.0引脚,2个黄色LED1、LED2分别接入P1.1、P1.2引脚,一个蜂鸣器 BEEP接入P1.0引脚。倒车时,开关SW闭合(ON),LED1和LED2闪烁,BEEP发声。PART 03三、硬件电路倒车警示器单片机控制电路PART 04四、控制程序倒车警示灯主函数流程图beep_alarm()函数流程图程序演示//程序:ex17.c//功能:倒车警示器控制程序#include //包含头文件REGX51.H,定义了51单片机的所有SFR#define ON 0 //定义符号常量ON#define OFF 1 //定义符号常量OFFsbit BEEP=P1^0; //定义位变量BEEP,蜂鸣器BEEP接P1.0引脚sbit LED1=P1^1; //定义位变量LED1,警示灯LED1接P1.1引脚sbit LED2=P1^2; //定义位变量LED2,警示灯LED2接P1.2引脚sbit SW=P0^0; //定义位变量SW,倒车开关SW接P0.0引脚//函数名:delay//函数功能:实现软件延时//形式参数:无符号整型变量i,控制空循环的循环次数//返回值:无void delay(unsigned int i){while(i--); //i次空操作}程序演示//函数名:light_alarm//函数功能:实现倒车光警示//形式参数:无//返回值:无void light_alarm(){LED1=~LED1; //LED1闪动LED2=~LED2; //LED2闪动}//函数名:beep_alarm//函数功能:实现蜂鸣器发“嘀嘀……”声警示//形式参数:无//返回值:无void beep_alarm(){unsigned int i;for(i=0;i<100;i++){BEEP=~BEEP; //BEEP发声delay(100);}for(i=0;i<100;i++){BEEP=OFF; //BEEP不发声delay(100);}}程序演示void main() //主函数{while(1) //无限循环{if(SW==ON) //判断倒车开关SW是不是闭合{light_alarm(); //倒车状态,倒车灯闪烁beep_alarm(); //倒车状态,倒车蜂鸣器发声}else{LED1=OFF; //非倒车状态,倒车灯LED1熄灭LED2=OFF; //非倒车状态,倒车灯LED2熄灭BEEP=OFF; //非倒车状态,蜂鸣器BEEP关闭}}}感谢您的观看Thanks for your attention. (共14张PPT)实例16 LED循环闪烁控制《单片机基础与应用(C语言版)》高等教育出版社一、任务导入任务要求用单片机控制8个LED循环闪烁,第1个LED点亮0.5s熄灭1s,闪动10次;然后,第2个LED点亮0.5s熄灭1s,闪动10次;循环8次,第8个LED闪动10次结束,再从第1个开始,如此循环下去。假定晶振频率为12MHz。二、任务分析这里采用定时器/计数器来完成0.5 s和1s精确定时,是用硬件加1计数器直接对机器周期进行计数。三、硬件电路单片机控制8个LED电路四、控制程序程序演示//程序:ex18.c//功能:8个LED循环闪烁控制程序#include //包含头文件REGX51.H,定义了51单片机的所有SFR#include //包含头文件INTRINS.h,定义了移位函数//函数名:time50ms//函数功能:在T1工作方式1下定时50ms,采用查询方式实现//形式参数:无符号整型变量i,控制定时时间,i*50ms//返回值:无void time50ms(unsigned char i){unsigned char k;for(k=0;kTH1=(65536-50000)/256; //重新设置T1计数初值高8位,定时时间50msTL1=(65536-50000)%256; //重新设置T1计数初值低8位TR1=1; //启动T1while(!TF1); //查询计数是否溢出,即定时50ms时间到,TF1=1TF1=0; //50ms定时时间到,将T1溢出标志位TF1清0}}程序演示void main() //主函数{unsigned char i,k,w;TMOD=0x10; //设置T1为工作方式1,定时功能P1=0xff; //熄灭8个LEDwhile(1) //无限循环{w=0xfe; //用来控制显示的位for(i=0;i<8;i++){ //控制8个LED循环for(k=0;k<10;k++){ //控制每个LED闪烁10次P1&=w; //点亮指定的LEDtime50ms(10); //定时0.5sP1=0xff; //熄灭8个LEDtime50ms(20); } //定时1sw=_crol_(w,1); } //闪烁的LED循环左移1位}}定时时间计算系统采用12MHz晶振,所以机器周期为1 s。程序中,T1工作在定时功能、工作方式1(16位计数器)下,从初值开始,加1计数到计数溢出,共计50000个计数脉冲,即50000个机器周期,所以,定时时间计算如下。t定时=50000×1 s=50ms定时器/计数器编程步骤这里计数溢出处理采用的是查询方式,CPU循环等待 TF1标志位由0变1,语句如下。while(!TF1); //查询计数是否溢出,即定时50ms时间到,TF1=1思考题。①如果采用T0的工作方式1进行定时,应该怎么修改程序。②如果采用T1的工作方式0或工作方式2进行定时,应该怎么修改程序。感谢您的观看(共22张PPT)实例17简易计数报警《单片机基础与应用(C语言版)》高等教育出版社01一、任务导入任务要求模拟银行取款吞卡报警系统,用1个按键模拟密码输入错误,按一下表示密码输入错误一次;用一个LED来模拟吞卡报警。系统要求:当输入密码错误5次,则吞卡报警指示灯点亮3s。假定晶振频率为12MHz。02二、任务分析本例中的计数和定时都可以采用定时器/计数器来实现。模拟密码输入错误的按键,接在外部计数脉冲的输入端;定时3s 采用定时功能实现。03三、硬件电路简易计数报警系统电路(按键K连接在定时器/计数器T1的外部脉冲输入端,用来模拟密码输入错误动作,LED D1用来模拟吞卡动作。)04四、控制程序程序演示//程序:ex19.c//功能:简易计数报警系统控制程序#include //包含头文件REGX51.H,定义了51单片机的所有SFRsbit LED=P1^0; //定义P1.0引脚的位名称为LED//函数名:time50ms//函数功能:在T0工作方式1下定时50ms,采用查询方式实现//形式参数:无符号整型变量i,控制定时时间,i*50ms//返回值:无void time50ms(unsigned char i){unsigned char k;for(k=0;kTH0=(65536-50000)/256; //重新设置T0计数初值高8位,定时时间50msTL0=(65536-50000)%256; //重新设置T0计数初值低8位TR0=1; //启动T0while(!TF0); //查询计数是否溢出,即定时50ms时间到,TF0=1TF0=0; //50ms定时时间到,将T0溢出标志位TF0清0}}程序演示void main() //主函数{LED=1; //熄灭LEDTMOD=0x61; //设置T0为工作方式1,定时;T1为工作方式2,计数TL1=256-5; //设置T1的计数初值,计数个数为5(5次错误)TH1=256-5; //初值缓冲器赋值,具有初值自动重载功能TR1=1; //启动T1,K每按下一次,则加1计数while(1) //无限循环{while(!TF1); //查询T1计数是否溢出,即TF1=1TF1=0;LED=0; //5次计数,计数溢出,则点亮LEDtime50ms(60); //定时3sLED=1; //熄灭LED}}思考题:系统加上蜂鸣器,怎么修改程序,使得吞卡报警灯亮时,蜂鸣器发出“嘟嘟”声。实例18 正脉冲宽度测量《单片机基础与应用(C语言版)》高等教育出版社01一、任务导入任务要求利用定时器/计数器的门控位GATE测量正脉冲宽度。假定晶振频率12MHz,正脉冲宽度不超过256 s,将测量结果以二进制数形式(00~FF)显示在8个LED上。02二、任务分析03三、硬件电路04四、控制程序程序演示//程序:ex20.c//功能:正脉冲宽度测量程序#include //包含头文件REGX51.H,定义了51单片机的所有SFRsbit INPUT=P3^2; //定义P3.2引脚的位名称为INPUTvoid main() //主函数{TMOD=0x0a; //设置T0:GATE=1,定时功能,工作方式2TL0=0; //设置T0的计数初值为0TH0=0; //初值缓冲器赋值,具有初值自动重载功能while(INPUT==1); //等待输入脉冲变0TR0=1; //将运行控制位置1,尚未启动计数while(INPUT==0); //等待输入脉冲变1,真正启动计数while(INPUT==1); //等待输入脉冲变0,计数器停止计数TR0=0; //将运行控制位清0P1=TL0; //将计数结果显示在P1控制的8个LED上while(1); //停机}05思考题:怎么利用GATE门控位设计一个简易频率计,用于测量占空比为50%的方波频率。Thanks for your attention. 感谢您的观看(共13张PPT)实例19 定时器输出PWM可调光台灯《单片机基础与应用(C语言版)》高等教育出版社01一、任务导入任务要求用1个LED模拟台灯的灯泡(用8个LED模拟效果更好),用1个开关控制灯的亮度;灯泡有较亮和较暗2个亮度,开关闭合时灯泡较亮,开关断开时灯泡较暗。02二、任务分析PWM技术,是一种周期一定而高低电平可调的方波信号。当输出脉冲的频率一定时,输出脉冲的占空比越大,其高电平持续的时间越长。高电平持续的时间与信号周期的比值,称为占空比。只要改变和的值,也就改变波形的占空比,则高低电平持续的时间就改变了,达到PWM脉宽调制的目的。03三、硬件电路定时器输出PWM可调光台灯电路(也可以用8个LED模拟台灯灯泡)04四、程序设计采用定时器/计数器T0的定时功能亮灭时间的定时。控制灯泡较亮状态和较暗状态的波形控制灯泡较亮状态和较暗状态的波形(a)占空比为1/4的PWM波形(灯泡较亮)(b)占空比为3/4的PWM波形(灯泡较暗)程序演示//程序:ex21.c//功能:定时器输出PWM可调光台灯控制程序#include //包含头文件REGX51.H,定义了51单片机的所有SFRsbit LED=P1^0; //定义P1.0引脚的位名称为LEDsbit S1=P0^0; //定义P0.0引脚的位名称为S1//函数名:time5ms//函数功能:在T0工作方式0下定时5ms,采用查询方式实现//形式参数:无符号整型变量i,控制定时时间,i*5ms//返回值:无void time5ms(unsigned char i){unsigned char k;for(k=0;k{TH0=(8192-5000)/32; //重新设置T0计数初值高8位,定时时间5msTL0=(8192-5000)%32; //重新设置T0计数初值低8位TR0=1; //启动T0while(!TF0); //查询计数是否溢出,即定时5ms时间到,TF0=1TF0=0; //5ms定时时间到,将T0溢出标志位TF0清0}}程序演示void main() //主函数{TMOD=0x00; //设置T0,定时,方式0while(1) //无限循环{while(S1==0) //开关闭合,占空比为1/4,较亮(低电平亮灯){LED=0; //点亮LEDtime5ms(3); //定时15msLED=1; //熄灭LEDtime5ms(1); //定时5ms}LED=0; //开关断开,占空比为3/4,较暗time5ms(1); //定时5msLED=1; //熄灭LEDtime5ms(3); //定时15ms}}思考题:改变定时时间,从而改变PWM输出波形,使得灯泡亮度发生变化。Thanks for your attention. 感谢您的观看(共16张PPT)实例20 中断实现LED闪烁控制《单片机基础与应用(C语言版)》高等教育出版社一、任务导入壹任务要求二、任务分析贰8位LED流水灯、LED闪烁和交替亮灭时间可以采用定时器/计数器实现精确定时。2个按键实现外部中断源的中断申请,中断过程和中断编程是本例的关键。三、硬件电路叁中断实现LED闪烁控制电路(P1口控制8个LED,按键K1和K2分别连接2个外部中断输入端)四、程序设计肆程序演示//程序:ex22.c//功能:中断实现LED闪烁控制程序#include //包含头文件REGX51.H,定义了51单片机的所有SFR#include sbit K1=P3^2; //定义P3.2引脚的位名称为K1sbit K2=P3^3; //定义P3.3引脚的位名称为K2//函数名: delayms//函数功能:延时处理程序,单位毫秒//形式参数:无符号整型数,延时的毫秒数//返回值:无void delayms (unsigned int ms){unsigned int i;while(ms--){for(i=0;i<120;i++); //12MHz晶体}}程序演示//函数名:time50ms//函数功能:在T0工作方式1下定时50ms,采用查询方式实现//形式参数:无符号整型变量i,控制定时时间,i*50ms//返回值:无void time50ms(unsigned char i){unsigned char k;for(k=0;k{TH0=(65536-50000)/256; //重新设置T0计数初值高8位,定时时间50msTL0=(65536-50000)%256; //重新设置T0计数初值低8位TR0=1; //启动T0while(!TF0); //查询计数是否溢出,即定时5ms时间到,TF0=1TF0=0; //50ms定时时间到,将T0溢出标志位TF0清0}}程序演示void main() //主函数{TMOD=0x01; //设置T0,定时,方式1EX0=1; //外部中断0允许位IT0=1; //设置外部中断0为下降沿触发方式PX0=1; //设置外部中断0为高优先级EX1=1; //外部中断1允许位IT1=0; //设置外部中断1为低电平触发方式EA=1; //允许所有中断P1=0xfe; //设置左移流水灯初值while(1) //无限循环{time50ms(20); //延时1sP1=_crol_(P1,1); //P1左移1位控制流水灯效果}}程序演示void main() //主函数{TMOD=0x01; //设置T0,定时,方式1EX0=1; //外部中断0允许位IT0=1; //设置外部中断0为下降沿触发方式PX0=1; //设置外部中断0为高优先级EX1=1; //外部中断1允许位IT1=0; //设置外部中断1为低电平触发方式EA=1; //允许所有中断P1=0xfe; //设置左移流水灯初值while(1) //无限循环{time50ms(20); //延时1sP1=_crol_(P1,1); //P1左移1位控制流水灯效果}}程序演示程序演示思考题:(1)如果删除main()函数中的语句PX0=1;,请问K1还可以中断K2实现中断嵌套吗?(2)函数 int_0()和int_1()是什么时候调用的,与函数time50ms()的调用有什么不同。提示:低优先级不可以中断高优先级实现中断嵌套;同一级别的2个中断源,也不可以实现中断嵌套。感谢您的观看Thanks for your attention. 展开更多...... 收起↑ 资源列表 实例15 倒车警示器(课件) 《单片机基础与应用》(C语言版) 同步教学.pptx 实例16 LED循环闪烁控制(课件) 《单片机基础与应用》(C语言版) 同步教学.pptx 实例17 简易计数报警和实例18 正脉冲宽度测量(课件) 《单片机基础与应用》(C语言版) 同步教学.pptx 实例19 定时器输出PWM可调光台灯(课件) 《单片机基础与应用》(C语言版) 同步教学.pptx 实例20 中断实现LED闪烁控制(课件) 《单片机基础与应用》(C语言版) 同步教学.pptx