[信息与通信]单片机最小系统的设计与应用.ppt

上传人:sccc 文档编号:5615015 上传时间:2023-08-02 格式:PPT 页数:61 大小:1.63MB
返回 下载 相关 举报
[信息与通信]单片机最小系统的设计与应用.ppt_第1页
第1页 / 共61页
[信息与通信]单片机最小系统的设计与应用.ppt_第2页
第2页 / 共61页
[信息与通信]单片机最小系统的设计与应用.ppt_第3页
第3页 / 共61页
[信息与通信]单片机最小系统的设计与应用.ppt_第4页
第4页 / 共61页
[信息与通信]单片机最小系统的设计与应用.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《[信息与通信]单片机最小系统的设计与应用.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]单片机最小系统的设计与应用.ppt(61页珍藏版)》请在三一办公上搜索。

1、1,电子设计专题之一-单片机最小系统的设计与应用,-福建师范大学协和学院 董建怀,2,本专题主要内容,单片机最小系统的设计与应用(1).单片机最小系统硬件(2).液晶显示输出模块(3).键盘扫描输入模块(4).基本输入输出的设计与实现(5).单片机资源受限的解决方案,3,一、单片机最小系统硬件简介,1.1 51单片机及外围电路,4,1.2 键盘及LED电路,5,1.3 LCD电路,LED-,控制背光,6,1.4 声音输出电路,7,二、LCD 输出模块,单片机(数据处理),控制部分,数据采集,显示部分,输出部分,8,9,10,2.1 SMC1602A简介(1),液晶显示模块具有体积小、功耗低、显

2、示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件了。SMC1602A使用HD44780芯片(或兼容芯片)来实现控制。1602最多可以显示32个字符(或汉字),分2行显示,每行最多16个字符(或汉字)。PROTEUS仿真模型:LM016L。,11,2.1 SMC1602A简介(2),12,2.1 SMC1602A简介(3),上面是1602各引脚的功能,具体不同厂家生产的引脚可能不一样,大家使用前要注意看厂家提供的资料。,13,2.2 SMC1602A引脚说明,VDD:电源正极,4.55.5V,通常使用5V电压;VL:LCD对比度调节端,电压调节范围为05V。接正

3、电源时对比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度,或者直接串接一个电阻到地;RS:MCU写入数据或者指令选择端。MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平;R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据;E:LCD模块使能信号控制端。写数据时,需要下降沿触发模块。D0D7:8位数据总线,三态双向。如果MCU的I/O口资源紧张的话,该模块也可以只使用4位数据线D4D7接口传送数据。BLA:LED背光正极。需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电

4、流为50mA左右;BLK:LED背光地端。,14,2.3 常用硬件连接图,LED-,控制背光,15,2.4 LCD内部的内存(1),固定字型ROM,称为CGROM。其内共存储192个57点阵的字型,以字符的ASCII码形式进行访问。,16,2.4 LCD内部的内存(2),数据显示RAM,称为DDRAM。用来存储写至LCD的字符。待显示的字符(ASCII码)必须送至DDRAM对应的地址上才能正确显示。下图为每个字符的地址。,17,2.4 LCD内部的内存(3),用户自定义字型RAM,称为CGRAM。共只有64字节,地址为00H3FH(须加40H),在此区域共可以自定义8个字符(或汉字),一个字符

5、的大小为57点阵,每个字符占8个字节,8个字符的访问码依次为00H07H。,18,2.5 1602LCD基本操作(1),D0D7端为8位数据口,进行数据传送,而RS、R/W、E端则配合可以做出不同的操作,对1602进行操作主要有四种,如下:,19,2.5 1602LCD基本操作(2),20,2.5 1602LCD基本操作(3),21,2.5 1602LCD基本操作(4),我们只要关注的地方是中间的Valid Data即有效数据区。在进行读操作的时候,RW置于1,RS则根据读的内容(状态或数据)置为0或1,注意看图中的A和B两根红线,在A位置,E置为1,经过td时间后,可以 在数据口读到正确的数

6、据,由于td的时间极短(ns级),我们的单片机操作一般是us级,所以可以不考虑这个时间差,在将E置为1之后,就可以紧跟着指令 去读取数据,在读到数据后,再将E置为0,经过THD2时间后,数据口上的数据失效。,22,2.5 1602LCD基本操作(5),23,2.5 1602LCD基本操作(6),在进行写操作的时候,RW要置为0,RS根据写的内容不同(指令或数据)置为1或0,同时,大家注意C和D两根红线,我们在将E置为1之前,要先将数据送到数据口上,然后,在C位置,将E置为1,经过tPW延时后,再将E置为0,在这个时间段内必须保证数据口上的数据稳定不变,为有效的数据。同理,由于 tPW这些延时相

7、对较短(ns级),所以在单片里也不必考虑延时问题。,24,2.6 1602的11条控制指令(1),25,2.6 控制指令说明(2),指令序号3:I/D光标移动方向:高右移;低左移。S屏幕文字左或右移:高有效;低无效;要和I/D配合起来用。指令序号4:D整体显示的开关:高开显示;低关显示。C光标的开关:高有光标;低无光标。B光标是否闪烁:高闪烁;低不闪烁。指令序号5:S/C高:移动显示的文字;低移动光标。指令序号6:DL高:8位数据总线;低 4位数据总线。N高:双行显示;低单行显示。F高:510点阵;低 57点阵。指令序号9:BF忙标志位:高忙;低不忙。,26,2.7 1602LCD软件设计-静

8、态显示流程图(1),27,2.7 1602LCD初始化的一般过程(2),28,2.8 应用-1602LCD硬件连接,29,2.9 1602LCD软件设计-静态显示(1),#include#includesbit rs=P24;sbit rw=P25;sbit ep=P26;unsigned char code dis1=;unsigned char code dis2=0591-22868687;void delay(unsigned char ms)/延时子程序 unsigned char i;while(ms-)for(i=0;i250;i+)_nop_();_nop_();_nop_()

9、;_nop_();,30,2.9 1602LCD软件设计-静态显示(2),bit lcd_bz()/检测LCD是否忙 bit result;rs=0;rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();result=(bit)(P0/写指令到LCD子程序,void lcd_wcmd(unsigned char cmd)while(lcd_bz();rs=0;rw=0;ep=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep

10、=0;,31,2.9 1602LCD软件设计-静态显示(3),/写显示位置子程序void lcd_pos(unsigned char pos)lcd_wcmd(pos|0 x80);/写显示数据到LCD子程序 void lcd_wdat(unsigned char dat)while(lcd_bz();rs=1;rw=0;ep=0;P0=dat;_nop_();_nop_();_nop_();_nop_();,ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;/初始化子程序void lcd_init()lcd_wcmd(0 x38);/功能设置 delay(1

11、);lcd_wcmd(0 x0c);/显示开关 delay(1);lcd_wcmd(0 x06);/模式设置 delay(1);lcd_wcmd(0 x01);/清显示 delay(1);,32,2.9 1602LCD软件设计-静态显示(4),void main(void)unsigned char i;lcd_init();/初始化 delay(10);lcd_pos(0 x01);/设置第一行的起始位置 i=0;while(dis1i!=0)lcd_wdat(dis1i);/依次输出显示的内容 i+;/注:上面的语句可用该语句代替(下同):for(i=0;i15;i+)lcd_wdat(d

12、is1i);lcd_pos(0 x42);/设置第二行的起始位置 i=0;while(dis2i!=0)lcd_wdat(dis2i);/依次输出显示的内容 i+;while(1);/等待,可执行其它任务,33,2.10 1602LCD软件设计-自定义字库/显示汉字,34,三、按键输入模块的设计,35,3.1 简单按键电路,36,3.2 44键盘电路,37,3.3 简单输入模块(按钮个数少时)软硬设计,按钮个数少时(=8个),可以直接和单片机的I/O口和外部中断引脚连接。软件上采用中断和查询相结合的方法,即在中断服务子程序中再用查询的方法判断被按下的键号。,38,四、基本输入输出的综合设计与实

13、现,要求:在LCD的固定位置上能显示固定的字符,当按不同的键时,在指定的位置上能显示出不同的字符。硬件设计软件设计,39,4.1 加一减一综合实践C51程序设计,用如下的电路图,实现:按“加一”按钮显示加“1”,按“加二”按钮显示加“2”,按“减一”按钮显示减“1”,按“减二”按钮显示减“2”;计数的最大值为19,最小值为0;按“清0”按钮显示“0”(清0)。,40,静动态LCD混合显示,41,程序(1),#includeREG51.h/头文件#includemath.h/头文件#includeunsigned char code disp_code10=0 x30,/0 0 x31,/1 0

14、 x32,/2 0 x33,/3 0 x34,/4 0 x35,/5 0 x36,/6 0 x37,/7 0 x38,/8 0 x39,/9;unsigned char code dis1=Count is:;unsigned char code dis2=;/定义,42,程序(2),sbitP20=P20;sbitP21=P21;sbitP22=P22;sbitP23=P23;sbit P36=P36;sbit rs=P24;sbit rw=P25;sbit ep=P26;unsigned int count;/定义计数变量bit lcd_bz()bit result;rs=0;rw=1;e

15、p=1;_nop_();_nop_();_nop_();_nop_();result=(bit)(P0,43,程序(3),void lcd_wcmd(unsigned char cmd)while(lcd_bz();rs=0;rw=0;ep=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;void lcd_pos(unsigned char pos)lcd_wcmd(pos|0 x80);,44,程序(4),void lcd_wdat(unsig

16、ned char dat)while(lcd_bz();rs=1;rw=0;ep=0;P0=dat;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;void delay(unsigned char n)/延时子程序unsigned char i,j;for(i=0;in;i+)for(j=0;i125;i+);,45,程序(5),void lcd_init()lcd_wcmd(0 x38);delay(1);lcd_wcmd(0 x0c);delay(1);lcd_wcmd(0 x06);del

17、ay(1);lcd_wcmd(0 x01);delay(1);void initial()/初始化程序EA=1;EX0=1;EX1=1;IT1=1;/选择INT1为脉冲触发方式IT0=1;TMOD=0 x66;/T1模式2,自动重装TH1=TL1=TH0=TL0=0 xff;/计数一次中断ET1=ET0=1;TR1=TR0=1;,46,程序(6),display()/显示子程序 unsigned int temp;unsigned char disp_c4,i,k;temp=count;for(i=0;i4;i+)/拆字程序 disp_ci=temp%10;temp=temp/10;lcd_p

18、os(0 x00);k=0;while(dis1k!=0)lcd_wdat(dis1k);k+;lcd_wdat(disp_codedisp_c3);lcd_wdat(disp_codedisp_c2);lcd_wdat(disp_codedisp_c1);lcd_wdat(disp_codedisp_c0);lcd_pos(0 x41);k=0;while(dis2k!=0)lcd_wdat(dis2k);k+;,47,程序(7),void q0()/清0子程序 if(P36=0)/P36为高,退出;P36为低,运行下面的语句 delay(10);/消抖 if(P36=0)/再判是否为0 w

19、hile(!P36);/P36为低,循环等待 count=0;/P36为高,计数值清0 void count_interrupt0()interrupt 0/外部中断0子程序 if(count=19)count=0;else count+;void count_interrupt1()interrupt 1/T0中断子程序if(count=19)count=0;else count=count+2;,48,程序(8),void count_interrupt2()interrupt 2/外部中断1子程序if(count=1)count=0;else count-;void count_inte

20、rrupt3()interrupt 3/T1中断子程序if(count=1)count=0;else count=count-2;main()/主程序initial();lcd_init();/delay(10);/flag=1;while(1)q0();/调用清0子程序 display();/循环显示,49,4.2 基本输入输出硬件电路,注:键盘的8根线接P2口,其中P2.0P2.3为行扫描线,P2.4P2.7为列回扫线。不用中断。,50,4.2 说明,请同学们根据上面的知识,自己编写出功能符合要求的程序!这部分内容请各位同学务必掌握好,且能灵活应用!,51,五、单片机资源受限的解决方案,5

21、2,1.单片机资源受限的主要表现形式,单片机的引脚(I/O接口)不够用。系统的定时器/计数器、串行通信接口、RAM、ROM、中断接口等不够用。系统的实时性不好,实时性无法得到保证。,53,2.单片机资源受限的解决方案,方案一:采用资源更丰富的MCU。方案二:由两片或更多片的单片机共同实现任务的要求。两片或更多片的单片机间采用并行通信或串行通信的方式进行。串行通信的总线类型可选用RS-232总线、485总线、I2C总线以及SPI总线等。,54,3 双机并行互连的实现方法 3.1单向并行通信接口的实现,单片机A为数据发送方,单片机B为数据接收方,8位端口可以是P0P3的任何一个。数据传送的流程是:

22、单片机A将数据送到端口后,通过STB信号中断单片机B,单片机B进入中断并从端口读取数据,读完后,利用BUSY信号进行应答,单片机 A在检查到端口线CHK上的应答信号后,就可以发送下一个数据了。以上是采用中断方式进行数据传送的具体方法。当然,单片机B也可以采用查询方式接收数据。,55,3.2 主从双向并行通信接口的实现(1),单片机A是主机,单片机B是从机,该接口使用了一个8位端口(如P0或P1)和4根控制信号线。在主从工作方式下,该接口的工作方式有主机发送从机接收和主机接收从机发送等两种情况。,56,3.2 主从双向并行通信接口的实现(2),1.主机发送从机接收方式的主机工作流程(1)主机设置

23、数据传送方法控制位DIR为0,以表示主机有数据发送到从机;(2)主机在STB端口产生一个负脉冲,以使从机进入中断,并准备接收数据;(3)主机将数据送8位数据端口,再设定ACK信号表示数据有效;(4)主机检查CHK端口,等待从机从8位端口取走数据;(5)数据发送完成返回。2.主机接收从机发送时的主机工作流程(1)主机设置数据传送方向控制位DIR为1,以表示主机将从从机读取数据;(2)主机在STB端口产生一个负脉冲,以使从机进入中断,并准备发送数据;(3)主机查询CHK端口,等待从机将数据送到8位端口上;(4)主机从8位端口上读取数据,再设定ACK信号以表示数据已被读取;(5)数据接收完成返回。,

24、57,3.2 主从双向并行通信接口的实现(3),3.从机工作流程 在主从并行通信接口工作方式下,无论从机是接收数据还是发送数据,都是在中断(也可以是查询方式)方式下进行的,从机的工作流程如下:(1)进入中断服务程序;(2)检查数据传送的方向;(3)如果DIR为0,则等待CHK信号有效,再从8位端读取数据,读完后设定ACK信号有效;(4)如果DIR为1,从机将数据送到8位端上,再设定ACK为有效,并等待主机取走数据(即CHK信号有效);(5)退出中断服务程序。,58,3.3 无主从双向并行通信接口的实现(1),无主从双向并行通信接口的特点是两个单片机处在平等的地位,两个单片机均可随时提出申请,向

25、对方发送数据,当然也可通过简单的接口协议从对方读取数据。这种情况下,就有可能出现两个单片机同时提出使用8位端口的申请而发生冲突,从而影响双方数 据的传送。要解决这个问题,就要求每一方必须在数据传送之前进行检查,以判断8位端口是否被对方所使用,从而避免冲突的发生。,59,3.3 无主从双向并行通信接口的实现(2),该接口中采用了5根控制信号线,其中CHK/ACK控制信号线,其中CHK/ACK控制信号线的功能可以复用。8位端口可以是P0、P1或其它 8位I/O口。在无主从双向并行通信接口中,由于单片机A与单片机B没有主从关系而处在平等位置,所以单片机B与单片机A的数据接收发送流程完全相同。这里只说

26、明单片机A的数据接收发送流程。,60,3.3 无主从双向并行通信接口的实现(3),1.数据发送流程 下面给出单片机A的数据发送流程:(1)检查CHKREQ,判断单片机B是否提出了数据传送申请;(2)如果单片机B提出了申请,则转a继续等待;否则,单片机A提出申请,将REQ置为有效;(3)再次检查CHKREQ,判断单片机B是否同时提出了申请;(4)如果单片机B提出了申请,则发生冲突;清除REQ并延时;然后执行(1);(5)将数据送8位端口,设定STB有效;(6)检查CHK,等待单片机B将数据取走;(7)检查单片机A的数据是否全部送完,如没有则转执行(5);(8)撤销REQ信号,释放8位端口;(9)数据发送完成,退出流程。,61,3.3 无主从双向并行通信接口的实现(4),2.数据接收流程 单片机A的数据接收流程如下:(1)进入中断服务流程;(2)从8位端口读取数据;(3)设置ACK信号有效,表示数据已成功读取;(4)退出中断服务流程。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号