单片机应用系统设计实例-

上传人:左****笑 文档编号:145554714 上传时间:2020-09-21 格式:PPT 页数:44 大小:245.02KB
返回 下载 相关 举报
单片机应用系统设计实例-_第1页
第1页 / 共44页
单片机应用系统设计实例-_第2页
第2页 / 共44页
单片机应用系统设计实例-_第3页
第3页 / 共44页
单片机应用系统设计实例-_第4页
第4页 / 共44页
单片机应用系统设计实例-_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《单片机应用系统设计实例-》由会员分享,可在线阅读,更多相关《单片机应用系统设计实例-(44页珍藏版)》请在金锄头文库上搜索。

1、公选课 单片机基础及应用,设计实例,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)延时功能 延时子程序设计,#include #define uin

2、t unsigned int #define uchar unsigned char,void main(void) while(1) P1_0=0; delay(5000); P1_0=1; delay(5000); ,void delay(uint t) /延时0.1*t毫秒 uint i; do for(i=0;i10;i+) ; while(t-); ,void delay(uint t); /声明函数,2、用8个LED发光二极管,设计一个循环闪烁的流水灯。,2.1硬件设计,2.2软件设计,1)初始化 51头文件、宏定义 2)主程序,即main()程序 灯的循环闪亮控制 3)延时功能

3、延时子程序设计,如何进行灯的循环闪亮控制? intrins.h 内部函数库 (包含变量循环移位、位操作等函数) 需要将该函数包含进来,同时对函数原型进行声明。,#include uchar _crol_(uchar a,uchar n); /*函数原型,左循环*/ uchar _cror_(uchar a,uchar n); /*函数原型,右循环*/,#include uchar _crol_(uchar a,uchar n); /*函数原型*/ uchar _cror_(uchar a,uchar n); /*函数原型,右循环*/,void main(void) uint a = 0 xfe

4、; while(1) P1=a; delay(5000); a=_crol_(a,1); ,3、通过设置中断,改变灯的循环方向,控制灯的亮灭。,3.1硬件设计,1)中断的概念,中断技术是计算机中一项很重要的技术。 中断系统的功能是为了解决快速CPU和慢速外设间的矛盾,它由软件和硬件组成。 有了中断系统,能使计算机的功能更强、效率更高、使用更灵活。 51单片机系统有5个中断源。,2)日常中断的例子,你正在专心看书,突然电话铃响,于是你记下正在看的书的页数,去接电话,接完电话后再回来接着看书。,3)计算机中的中断概念,中断是指由于某种随机事件(甲方)的发生,计算机(乙方)暂停现行程序的运行,转去执

5、行另一程序,以处理发生的事件,处理完毕后又自动返回原来的程序继续运行。 将能引起中断的事件称为中断源。 CPU现行运行的程序称为主程序。 处理随机事件的程序称为中断服务子程序。,4)相关的特殊功能寄存器,TCON,TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,IE0/IE1:外部中断申请标志位: =0:没有外部中断申请; =1:有外部中断申请。,IT0/IT1:外部中断请求的触发方式选择位: =0:在INT0/INT1端申请中断的信号低电平有效; =1:在INT0/INT1端申请中断的信号负跳变有效.,EA ET2 ES ET1 EX1 ET0 EX0,IE,3.2软件设计,

6、1)初始化 51头文件、宏定义 2)主程序,即main()程序 灯的循环闪亮控制 中断初始化 3)延时功能 4)中断服务程序设计,3.2软件设计,中断初始化 触发方式设置 中断允许控制 中断服务程序设计,中断初始化 IT0=1; EA=1; EX0=1;,中断服务程序,函数名()interrupt n using m Void int0(void) interrupt 0 /* 外部中断0的服务函数定义,使用第二组工作寄存器组*/,void int0(void) interrupt 0 uchar a=0 xfe,i=16; P1=0 x0; delay(5000); P1=0 x0ff; d

7、elay(5000); P1=0 x0; delay(5000); P1=0 x0ff; delay(5000); do P1=a; delay(5000); a=_cror_(a,1); while(i-); ,4、通过定时,精确控制闪烁500ms。 针对任务一进行操作。,使用定时器T0 1)设置定时器工作方式 2)计算初始值 3)编写初始化程序 4)编写中断服务程序,1)设置定时器工作方式,TMOD,2)计算初始值,晶振12Mhz 1个机器周期:,定时50ms,需要计数:,定时器初始值:,定时500ms,需要中断10次。,3)编写初始化程序,TMOD=0X01; TH0=0X3C; TL0

8、=0XB0; EA=1; ET0=1; TR0=1;,4)编写中断服务程序,Void timer0(void) interrupt 1 TH0=0 x3c; TL0=0 xb0; i+; if(i=9) i=0; P1_0=P1_0; ,5、以秒为单位,用LED数码管显示当前计数值。,LED数码管显示电路原理,LED数码管的结构: (1)共阳 (2)共阴, 共阳数码管每个段笔画是用低电平(“0”)点亮, 共阴数码管段笔画是用高电平(“1”)点亮,公共阳极,h g f e d c b a,a,b,c,d,g,e,f,h,公共阴极,h g f e d c b a,a,b,c,d,g,e,f,h,h

9、 g f a,h g f a,高电平点亮,低电平点亮,接高电平,接地,要显示某个字形,就应使此字形的相应断码的二极管点亮,实际就是送一个用不同电平组合代表的数据字(显示码)来控制LED的显示,此数据称为字符的段码或字形码。 共阴极和共阳极LED显示器段码不同。,共阳LED数码管: 公共端(字位) 接高电平, 笔划(字段) 置为低电平 就被点亮了,比如要显示“0” 须令a b c d e f 为“0” 电平,g h为“1”电平。,管脚识别小技巧: 用万用表测一下就可以了。数码管分为共阴极和共阳极。以共阴极为例: 先用万用表的正极(对于数字万用表为红色表笔)放在某一个管脚,另外一个负极依次去测量其

10、他管脚。若没有一个管脚亮,说明正极接的是公共端(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=“011000

11、0”),如果要显示小数点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)显示程序 将显示数值分为:个位、十位、百位、千位,分别查表显示。,初始化:,uchar code a10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x

12、07,0 x7f,0 x6f;/段码组合,共阴极 uchar m=0; /计数循环变量 uint n=0; /计数值,定时中断服务程序,void timer0(void) interrupt 1 TH0=0 x3C; TL0=0 xB0; m+; if(m=19) m=0; n+; P1_0=P1_0; ,显示程序,void display(void) P2=0 xf7,P0=an%10; delay(20); P2=0 xfb,P0=an%100/10; delay(20); P2=0 xfd,P0=an/100%10; delay(20); P2=0 xfe,P0=an/1000; delay(20); ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号