单片机应用系统设计实例

上传人:woxinch****an2018 文档编号:56948046 上传时间:2018-10-17 格式:PPT 页数:44 大小:280.50KB
返回 下载 相关 举报
单片机应用系统设计实例_第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 = 0xfe;while

4、(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软件设计,1)初始化 51头文件、宏定

6、义 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=0xfe,i=16;P1=0x0;delay(5000);P1=0x0ff;delay(5000);P1=0x0;del

7、ay(5000);P1=0x0ff;delay(5000);doP1=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=0XB0; EA=1; ET0=1; TR0=1;,4)编写中断

8、服务程序,Void timer0(void) interrupt 1 TH0=0x3c;TL0=0xb0;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 g f a,h g f a,高电平点亮,低电平点亮,接高电平,接地,要显示某

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

10、判断引脚了,正极接的是相应的段码端(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 再延时一段时间(注意不能过长,不然看到的

11、连续显示的现象了,下面一样) 再选择第二个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=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /段码组合,共阴极 uchar m=0; /计数循环变量 uint n=0; /计数值,定时中断服务程序,void timer0(void) interrupt 1 TH0=0x3C;TL0=0xB0;m+;if(m=20)m=0;n+;P1_0=P1_0; ,显示程序,void display(void) P2=0xf7,P0=an%10;delay(20);P2=0xfb,P0=an%100/10;delay(20);P2=0xfd,P0=an/100%10;delay(20);P2=0xfe,P0=an/1000;delay(20);,

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

当前位置:首页 > 中学教育 > 高中教育

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