1、公选课公选课 单片机应用实训单片机应用实训用用1个个LED发光二极管,设计一个循环闪烁的指示发光二极管,设计一个循环闪烁的指示灯。灯。n2、用、用8个个LED发光二极管,设计一个循环闪烁的流水发光二极管,设计一个循环闪烁的流水灯。灯。n3、通过设置中断,改变灯的循环方向,控制灯的亮灭。、通过设置中断,改变灯的循环方向,控制灯的亮灭。n4、通过定时,精确控制、通过定时,精确控制P1.0闪烁闪烁500ms。n5、以秒为单位,用、以秒为单位,用LED数码管显示当前计数值。数码管显示当前计数值。用用1个个LED发光二极管,设计一发光二极管,设计一个循环闪烁的指示灯。个循环闪烁的指示灯。1.1硬件设计硬
2、件设计1.2软件设计软件设计n1 1)初始化)初始化n5151头文件、宏定义头文件、宏定义n2 2)主程序,即)主程序,即mainmain()程序()程序n灯的亮灭控制灯的亮灭控制n3 3)延时功能)延时功能n延时子程序设计延时子程序设计n#include n#define uint unsigned intn#define uchar unsigned charnvoid main(void)nnwhile(1)nn P1_0=0;n delay(5000);n P1_0=1;n delay(5000);nnnvoid delay(uint t)/延时延时0.1*t毫秒毫秒n n uint
3、i;n do n n for(i=0;i10;i+)n ;n while(t-);n void delay(uint t);/声明函数声明函数n2、用、用8个个LED发光二极管,设计一发光二极管,设计一个循环闪烁的流水灯。个循环闪烁的流水灯。2.1硬件设计硬件设计2.2软件设计软件设计n1 1)初始化)初始化n5151头文件、宏定义头文件、宏定义n2 2)主程序,即)主程序,即mainmain()程序()程序n灯的循环闪亮控制灯的循环闪亮控制n3 3)延时功能)延时功能n延时子程序设计延时子程序设计n如何进行灯的循环闪亮控制?如何进行灯的循环闪亮控制?n需要将该函数包含进来,同时对函数需要将该
4、函数包含进来,同时对函数原型进行声明。原型进行声明。n#include n uchar _crol_(uchar a,uchar n);n/*函数原型,左循环*/nuchar _cror_(uchar a,uchar n);n/*函数原型,右循环*/#include uchar _crol_(uchar a,uchar n);/*函数原型函数原型*/uchar _cror_(uchar a,uchar n);/*函数原型,右循环函数原型,右循环*/void main(void)uint a=0 xfe;while(1)P1=a;delay(5000);a=_crol_(a,1);n3、通过设置
5、中断,改变灯的循环方、通过设置中断,改变灯的循环方向,控制灯的亮灭。向,控制灯的亮灭。3.1硬件设计硬件设计1)中断的概念)中断的概念n中断技术是计算机中一项很重要的中断技术是计算机中一项很重要的技术。技术。n中断系统的功能是为了解决快速中断系统的功能是为了解决快速CPUCPU和慢速外设间的矛盾,它由软件和和慢速外设间的矛盾,它由软件和硬件组成。硬件组成。n有了中断系统,能使计算机的功能有了中断系统,能使计算机的功能更强、效率更高、使用更灵活。更强、效率更高、使用更灵活。n5151单片机系统有单片机系统有5 5个中断源。个中断源。2)日常中断的例子)日常中断的例子 你正在专心看你正在专心看书,
6、突然电话铃响,书,突然电话铃响,于是你记下正在看的于是你记下正在看的书的页数,去接电话,书的页数,去接电话,接完电话后再回来接接完电话后再回来接着看书。着看书。3)计算机中的中断概念)计算机中的中断概念中断中断是指由于某种随机事件(甲方)是指由于某种随机事件(甲方)的发生,计算机(乙方)暂停现行程的发生,计算机(乙方)暂停现行程序的运行,转去执行另一程序,以处序的运行,转去执行另一程序,以处理发生的事件,处理完毕后又自动返理发生的事件,处理完毕后又自动返回原来的程序继续运行。回原来的程序继续运行。将能引起中断的事件称为将能引起中断的事件称为中断源中断源。CPUCPU现行运行的程序称为现行运行的
7、程序称为主主程序程序。处理随机事件的程序称为处理随机事件的程序称为中断服务中断服务子程序子程序。4)相关的特殊功能寄存器)相关的特殊功能寄存器TCONTCONTF1 TR1 TF0 TR0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0IE0/IE1IE0/IE1:外部中断申请标志位:外部中断申请标志位:=0=0:没有外部中断申请;:没有外部中断申请;=1=1:有外部中断申请。:有外部中断申请。IT0/IT1IT0/IT1:外部中断请求的触发方式选择位:外部中断请求的触发方式选择位:=0=0:在:在INT0/INT1INT0/INT1端申请中断的信号低电平有效端申请中断的信号低
8、电平有效;=1 =1:在:在INT0/INT1INT0/INT1端申请中断的信号负跳变有效端申请中断的信号负跳变有效.EA ET2 ES ET1 EX1 ET0 EX0IEIEEX0/EX1EX0/EX1位:位:分别是分别是INT0/INT1INT0/INT1的中断允许控制位的中断允许控制位:=0 =0 时禁止中断;时禁止中断;=1=1 时允许中断。时允许中断。EAEA:总的中断允许控制位(总开关):总的中断允许控制位(总开关):=0=0 时禁止全部中断;时禁止全部中断;=1=1 时允许中断。时允许中断。3.2软件设计软件设计n1 1)初始化)初始化n5151头文件、宏定义头文件、宏定义n2
9、2)主程序,即)主程序,即mainmain()程序()程序n灯的循环闪亮控制灯的循环闪亮控制n中断初始化中断初始化n3 3)延时功能)延时功能n4 4)中断服务程序设计)中断服务程序设计3.2软件设计软件设计n中断初始化中断初始化n触发方式设置触发方式设置n中断允许控制中断允许控制n中断服务程序设计中断服务程序设计n中断初始化中断初始化nIT0=1;nEA=1;nEX0=1;n void int0(void)interrupt 0 n n uchar a=0 xfe,i=16;nP1=0 x0;ndelay(5000);nP1=0 x0ff;ndelay(5000);nP1=0 x0;ndel
10、ay(5000);nP1=0 x0ff;ndelay(5000);ndonn P1=a;n delay(5000);n a=_cror_(a,1);nwhile(i-);n n4、通过定时,精确控制闪烁、通过定时,精确控制闪烁500ms。n针对任务一进行操作。针对任务一进行操作。n使用定时器使用定时器T0T0n1 1)设置定时器工作方式)设置定时器工作方式n2 2)计算初始值)计算初始值n3 3)编写初始化程序)编写初始化程序n4 4)编写中断服务程序)编写中断服务程序1 1)设置定时器工作方式)设置定时器工作方式GATEC/TM1M0GATEC/TM1M0TMOD000000012 2)计算
11、初始值)计算初始值n晶振12Mhzn1个机器周期:61Tp=12112 10s350 10500001n定时50ms,需要计数:定时器初始值:定时器初始值:6553650000155360 30 x CB定时定时500ms,需要中断,需要中断10次。次。3 3)编写初始化程序)编写初始化程序nTMOD=0X01;nTH0=0X3C;nTL0=0XB0;nEA=1;nET0=1;nTR0=1;4 4)编写中断服务程序)编写中断服务程序nVoid timer0(void)interrupt 1nn TH0=0 x3c;n TL0=0 xb0;n i+;nif(i=9)ni=0;nP1_0=P1_0
12、;nnn5、以秒为单位,用、以秒为单位,用LED数码管显示数码管显示当前计数值。当前计数值。LED数码管显示电路原理数码管显示电路原理LEDLED数码管的数码管的结构结构:(1 1)共阳)共阳(2 2)共阴)共阴公共阳极公共阳极h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh h公共阴极公共阴极h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh hh g f ah g f a高电平点亮高电平点亮低电平点亮低电平点亮接高电平接高电平接地接地共阳共阳LEDLED数码管:数码管:公共端公共端
13、(字位字位)接高电平,接高电平,笔划笔划(字段字段)置为低电平置为低电平就被点亮了就被点亮了比如要显示比如要显示“0”0”须令须令a b c d e fa b c d e f 为为“0 0”电平,电平,g hg h为为“1 1”电平。电平。共阳极共阳极h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh hh g f e d c b ah g f e d c b a累加器累加器 A1 1 0 0 0 0 0 01 1 0 0 0 0 0 00C0H=“0”0C0H=“0”n管脚识别小技巧:管脚识别小技巧:n用万用表测一下就可以了。数码管分为共
14、阴极用万用表测一下就可以了。数码管分为共阴极和共阳极。以共阴极为例:和共阳极。以共阴极为例:n先用万用表的正极(对于数字万用表为红色表先用万用表的正极(对于数字万用表为红色表笔)放在某一个管脚,另外一个负极依次去测笔)放在某一个管脚,另外一个负极依次去测量其他管脚。若没有一个管脚亮,说明正极接量其他管脚。若没有一个管脚亮,说明正极接的是公共端(的是公共端(COM)。若亮,根据发光位置)。若亮,根据发光位置就可以判断引脚了,正极接的是相应的段码端就可以判断引脚了,正极接的是相应的段码端(a,b,c,dp),负极为对应数码管),负极为对应数码管的公共端(的公共端(C1,C2)。)。4位一体共阴极位
15、一体共阴极LED数码管管脚分布如图所示:数码管管脚分布如图所示:5.1硬件设计硬件设计n如果每个如果每个LED上要显示的数字不同,上要显示的数字不同,那么它在那么它在同一时刻是不能同时显示同一时刻是不能同时显示的。的。n用这种数码管都是用这种数码管都是动态显示动态显示的。的。(可以到网上去看下动态显示)(可以到网上去看下动态显示)n比如比如4个个LED上要显示上要显示1234(假(假设是共阴极连接)设是共阴极连接)n4个个LED上显示上显示1234(假设共阴极连接)(假设共阴极连接)n过程如下:过程如下:n首先选种第一个首先选种第一个LED(即上面(即上面C1=0,C2=1,C3=1,C4=1
16、)n送送LED要显示的数据(要显示的数据(abcdefg=“0110000”),如果要显示小数点如果要显示小数点dp=1n再延时一段时间(注意不能过长,不然看到的连续再延时一段时间(注意不能过长,不然看到的连续显示的现象了,下面一样)显示的现象了,下面一样)n再选择第二个再选择第二个LED(即上面(即上面C1=1,C2=0,C3=1,C4=1)n送送LED要显示的数据(要显示的数据(abcdefg=1101101)如如果要显示小数点果要显示小数点dp=1n再延时一段时间再延时一段时间n接下来是第三、第四个接下来是第三、第四个LED也一样。也一样。5.2软件设计软件设计n1 1)定时中断服务程序
17、)定时中断服务程序n定时定时50ms50ms,中断,中断2020次为次为1 1秒秒n每中断每中断2020次,计数次,计数1 1次。次。n2 2)显示程序)显示程序n将显示数值分为:个位、十位、将显示数值分为:个位、十位、百位、千位,分别查表显示。百位、千位,分别查表显示。初始化:初始化:nuchar code a10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/段码组合,共阴极nuchar m=0;/计数循环变量nuint n=0;/计数值定时中断服务程序定时中断服务程序n void timer0(void)interrupt 1n n TH0=0 x3C;nTL0=0 xB0;nm+;nif(m=19)nm=0;n n+;n P1_0=P1_0;n n显示程序显示程序n void display(void)n nP2=0 xf7,P0=an%10;ndelay(20);nP2=0 xfb,P0=an%100/10;ndelay(20);nP2=0 xfd,P0=an/100%10;ndelay(20);nP2=0 xfe,P0=an/1000;ndelay(20);n