单片机应用系统设计实例

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

公选课——《单片机基础及应用》设计实例1、用1个LED发光二极管,设计一个循环闪烁的指示灯。2、用8个LED发光二极管,设计一个循环闪烁的流水灯。3、通过设置中断,改变灯的循环方向,控制灯的亮灭。4、通过定时,精确控制P1.0闪烁500ms。5、以秒为单位,用LED数码管显示当前计数值。1、用1个LED发光二极管,设计一个循环闪烁的指示灯。如何设计硬件和软件?1.1硬件设计注意:在接下来的仿真中,省略时钟及复位电路。1.2软件设计1)初始化51头文件、宏定义2)主程序,即main()程序灯的亮灭控制3)延时功能延时子程序设计#includeat89X52.h#defineuintunsignedint#defineucharunsignedcharvoidmain(void){while(1){P1_0=0;delay(5000);P1_0=1;delay(5000);}}voiddelay(uintt)//延时0.1*t毫秒{uinti;do{for(i=0;i10;i++);}while(t--);}voiddelay(uintt);//声明函数2、用8个LED发光二极管,设计一个循环闪烁的流水灯。2.1硬件设计2.2软件设计1)初始化51头文件、宏定义2)主程序,即main()程序灯的循环闪亮控制3)延时功能延时子程序设计如何进行灯的循环闪亮控制?intrins.h内部函数库(包含变量循环移位、位操作等函数)需要将该函数包含进来,同时对函数原型进行声明。#includeINTRINS.Huchar_crol_(uchara,ucharn);/*函数原型,左循环*/uchar_cror_(uchara,ucharn);/*函数原型,右循环*/#includeINTRINS.Huchar_crol_(uchara,ucharn);/*函数原型*/uchar_cror_(uchara,ucharn);/*函数原型,右循环*/voidmain(void){uinta=0xfe;while(1){P1=a;delay(5000);a=_crol_(a,1);}}3、通过设置中断,改变灯的循环方向,控制灯的亮灭。3.1硬件设计1)中断的概念中断技术是计算机中一项很重要的技术。中断系统的功能是为了解决快速CPU和慢速外设间的矛盾,它由软件和硬件组成。有了中断系统,能使计算机的功能更强、效率更高、使用更灵活。51单片机系统有5个中断源。2)日常中断的例子你正在专心看书,突然电话铃响,于是你记下正在看的书的页数,去接电话,接完电话后再回来接着看书。3)计算机中的中断概念中断是指由于某种随机事件(甲方)的发生,计算机(乙方)暂停现行程序的运行,转去执行另一程序,以处理发生的事件,处理完毕后又自动返回原来的程序继续运行。将能引起中断的事件称为中断源。CPU现行运行的程序称为主程序。处理随机事件的程序称为中断服务子程序。4)相关的特殊功能寄存器TCONTF1TR1TF0TR0IE1IT1IE0IT0IE0/IE1:外部中断申请标志位:=0:没有外部中断申请;=1:有外部中断申请。IT0/IT1:外部中断请求的触发方式选择位:=0:在INT0/INT1端申请中断的信号低电平有效;=1:在INT0/INT1端申请中断的信号负跳变有效.EA—ET2ESET1EX1ET0EX0IEEX0/EX1位:分别是INT0/INT1的中断允许控制位:=0时禁止中断;=1时允许中断。EA:总的中断允许控制位(总开关):=0时禁止全部中断;=1时允许中断。3.2软件设计1)初始化51头文件、宏定义2)主程序,即main()程序灯的循环闪亮控制中断初始化3)延时功能4)中断服务程序设计3.2软件设计中断初始化触发方式设置中断允许控制中断服务程序设计中断初始化IT0=1;EA=1;EX0=1;中断服务程序函数名()interruptn[usingm]{}Voidint0(void)interrupt0/*外部中断0的服务函数定义,使用第二组工作寄存器组*/voidint0(void)interrupt0{uchara=0xfe,i=16;P1=0x0;delay(5000);P1=0x0ff;delay(5000);P1=0x0;delay(5000);P1=0x0ff;delay(5000);do{P1=a;delay(5000);a=_cror_(a,1);}while(i--);}4、通过定时,精确控制闪烁500ms。针对任务一进行操作。使用定时器T01)设置定时器工作方式2)计算初始值3)编写初始化程序4)编写中断服务程序1)设置定时器工作方式GATEC/TM1M0GATEC/TM1M0TMOD000000012)计算初始值晶振12Mhz1个机器周期:61Tp=1211210s35010500001定时50ms,需要计数:定时器初始值:655365000015536030xCB定时500ms,需要中断10次。3)编写初始化程序TMOD=0X01;TH0=0X3C;TL0=0XB0;EA=1;ET0=1;TR0=1;4)编写中断服务程序Voidtimer0(void)interrupt1{TH0=0x3c;TL0=0xb0;i++;if(i==9){i=0;P1_0=~P1_0;}}5、以秒为单位,用LED数码管显示当前计数值。LED数码管显示电路原理LED数码管的结构:(1)共阳(2)共阴@共阳数码管每个段笔画是用低电平(“0”)点亮,共阴数码管段笔画是用高电平(“1”)点亮公共阳极hgfedcbaabcdgefh公共阴极hgfedcbaabcdgefhhgf……ahgf……a高电平点亮低电平点亮接高电平接地要显示某个字形,就应使此字形的相应断码的二极管点亮,实际就是送一个用不同电平组合代表的数据字(显示码)来控制LED的显示,此数据称为字符的段码或字形码。共阴极和共阳极LED显示器段码不同。共阳LED数码管:公共端(字位)接高电平,笔划(字段)置为低电平就被点亮了☞比如要显示“0”须令abcdef为“0”电平,gh为“1”电平。共阳极hgfedcbaabcdgefhhgfedcba累加器A110000000C0H=“0”管脚识别小技巧:用万用表测一下就可以了。数码管分为共阴极和共阳极。以共阴极为例:先用万用表的正极(对于数字万用表为红色表笔)放在某一个管脚,另外一个负极依次去测量其他管脚。若没有一个管脚亮,说明正极接的是公共端(COM)。若亮,根据发光位置就可以判断引脚了,正极接的是相应的段码端(a,b,c,……,dp),负极为对应数码管的公共端(C1,C2)。4位一体共阴极LED数码管管脚分布如图所示:5.1硬件设计如果每个LED上要显示的数字不同,那么它在同一时刻是不能同时显示的。用这种数码管都是动态显示的。(可以到网上去看下动态显示)比如4个LED上要显示1234(假设是共阴极连接)4个LED上显示1234(假设共阴极连接)过程如下:首先选种第一个LED(即上面C1='0',C2='1',C3='1',C4='1')送LED要显示的数据(abcdefg=“0110000”),如果要显示小数点dp='1'再延时一段时间(注意不能过长,不然看到的连续显示的现象了,下面一样)再选择第二个LED(即上面C1='1',C2='0',C3='1',C4='1')送LED要显示的数据(abcdefg=1101101)如果要显示小数点dp='1'再延时一段时间接下来是第三、第四个LED也一样。5.2软件设计1)定时中断服务程序定时50ms,中断20次为1秒每中断20次,计数1次。2)显示程序将显示数值分为:个位、十位、百位、千位,分别查表显示。初始化:ucharcodea[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码组合,共阴极ucharm=0;//计数循环变量uintn=0;//计数值定时中断服务程序voidtimer0(void)interrupt1{TH0=0x3C;TL0=0xB0;m++;if(m==19){m=0;n++;P1_0=~P1_0;}}显示程序voiddisplay(void){P2=0xf7,P0=a[n%10];delay(20);P2=0xfb,P0=a[n%100/10];delay(20);P2=0xfd,P0=a[n/100%10];delay(20);P2=0xfe,P0=a[n/1000];delay(20);}

1 / 44
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功