单片机C程序设计.ppt

上传人:小飞机 文档编号:6103484 上传时间:2023-09-24 格式:PPT 页数:36 大小:675KB
返回 下载 相关 举报
单片机C程序设计.ppt_第1页
第1页 / 共36页
单片机C程序设计.ppt_第2页
第2页 / 共36页
单片机C程序设计.ppt_第3页
第3页 / 共36页
单片机C程序设计.ppt_第4页
第4页 / 共36页
单片机C程序设计.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《单片机C程序设计.ppt》由会员分享,可在线阅读,更多相关《单片机C程序设计.ppt(36页珍藏版)》请在三一办公上搜索。

1、8.1 51单片机与LED显示器接口,8.1 LED数码管显示器的结构与原理,单片机控制系统中常用LED现示器来显示各种数字或符号.由于这种显示器显示清晰,亮度高,接口方便,因此被广泛应用于各种控制系统中.在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种,如图所示。,LED静态显示,LED静态显示时,其公共端直接接地(共阴极)或接电源(共阳极),各段选线分别与I/O口线相连。要显示字符,直接在I/O线送相应的字段码。相应段的发光二极管处恒定的导通或截止,直到需要显示另一个字符为止.,LED静态显示,这种工作方式下LED的亮度高,软件编程也比较容易;但是它占用比较多

2、I/O口的资源,常用于显示位数不多的情况.LED静态显示方式的接口有多种不同形式,使用74HC595芯片可以方便地组成静态显示接口.,8位移位寄存器,存储寄存器,三态输出控制,SER 14,SRCLK 11,SRCLK 10,RCLK 12,OE 13,9 Q7,15 1 2 3 4 5 6 7Q0 Q7,图8-3 74HC595的内部结构框图,74HC595是具有锁存功能的移位寄存器,其内部结构框图如图8-3所示.控制过程:当时钟端SRLCK(11脚)有时钟脉冲 时,移位寄存储器串行输入端SER(14脚)的数据转换为并行输出,在串行数据开始 输入之前将RCLK置0.移位寄存储器的输 出不会被

3、送入存储寄存器,在8位数据全部 送完后,将RCLK引脚置1,才会将新的数据 送入存储寄存器中.存储寄存器经过三态控 制器缓冲后对外输出.这样,整个数据传输期 间,74HC595的输出端数据始终保持稳定不 变.8位移位寄存器的进位位单独引出,即第 九脚,可以方便地进行阶联,以便根据需要将 许多片74HC595串接起来使用.,LED静态显示,74HC595的逻辑功能如表8-1所列.表中:H高电平;L低电平;-上升沿;X无关紧要,高或低电平均不影响.,表8-1 74HC595逻辑功能表,LED静态显示,图8-4 以74HC595组成的静态显示接口电路图,通过6片74HC595作为6位LED显示器的静

4、态显示接口.(参见P166图8-4的具体接法)所有芯片的时钟端(SRCLK)并联接到单片机的任一个I/O端.RCLK是锁存允许端,当RCLK引脚上有上升沿且其它条件符合时,移位寄存器中的内容被送入存储寄存器.,图8-4 静态显示接口,LED静态显示,例8-1 使用74HC595制作的6位串行显示接口电路,#include#include#define uchar unsigned charsbit Dat=P32;Sbit Clk=P33;Sbit RCK=P34;unsigned char DispBuf6;Uchar code DispTab=0 xC0,0 xF9,0 xA4,0 xB0

5、,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 x88,0 x83,0 xC6,0 xA1,0 x86,0 x8E,0 xFF;Void SendData(unsigned char SendDat)unsigned char I;for(I=0;i8;i+)if(SendDat,Void Disp()uchar c;uchar I;RCK=0;for(I=0;I6;I+)c=DispBufI;SendData(DispTabc);RCK=1;Void main()for(;)Disp();本程序的说明:参见P167,8.1.2 动态显示接口,图8-5 是实验板上

6、LED数码管的动态显示接口电路部分.这里LED数码管采用共阳方式,P0口作为段控制,P2.7P2.2通过PNP型的三极管分别接第16位COM端.例8.2是使用中断方式编写的动态数码管驱动程序.,8.1.2 动态显示接口,例8.2 动态数码管显示程序.要求:使用定时中断实现显示的程序,第15位各位始终显示0,第6位在09之间循环显示.,#include reg51.h#define uchar unsigned char#define uint unsigned int uchar code BitTab=0 x7F,0 xBF,0 xDF,0 xEF,0 xF7,0 xFB;uchar cod

7、e DispTab=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 x88,0 x83,0 xC6,0 xA1,0 x86,0 x8E,0 xFF;uchar DispBuf6;/6字节的显示缓冲区void Timer0()interrupt 1 uchar tmp;static uchar Count;/计数器,显示程序通过它得知现正显示哪个数码管 TH0=(65536-3000)/256;TL0=(65536-3000)%256;/定时时间为3000个周期 tmp=BitTabCount;/根据当前的计数值取位值

8、P2=P2|0 xfc;/P2与11111100B相或,将高6位置1 P2=P2,8.1.2 动态显示接口,/*延时程序*/void mDelay(unsigned int Delay)unsigned int i;for(;Delay0;Delay-)for(i=0;i124;i+);void main()uchar Counter=0;P1=0 xff;P0=0 xff;TMOD=0 x01;TH0=(65536-3000)/256;TL0=(65536-3000)%256;/定时时间为3000个周期TR0=1;/T0开始运行EA=1;/总中断允许ET0=1;/T0中断允许DispBuf0

9、=0;DispBuf1=0;DispBuf2=0;DispBuf3=0;DispBuf4=0;/显示器前5位均为0for(;)DispBuf5=Counter;Counter+;/计数if(Counter=10)Counter=0;mDelay(1000);,程序实现;程序分析:参见P169170(dled),8.2.1 键盘的工作原理,单片机系统种一般由软件来识别键盘上的闭合键,图8-7是单片键盘的一种接法.组成键盘的按键有触点式和非触点式两种,而单片机应用的一般是机械触点构成的.,8.2.2 键盘与单片机连接,将每个按键的一端接到单片机的I/O口,另一端接地,这是最简单、常用的一种方法.图

10、8.7所示是实验板上按键的接法.4个按键分别接到P3.2、P3.3、P3.4、P3.5.对于此接法可采用不断查询的方法,具体是检测是否有键闭合.例8.3 实现键控流水灯功能.4个按键定义如下:P3.2:开始,按此键则灯开始流动(由上而下);P3.3:停止,按此键则停止流动,所有灯为暗;P3.4:上,按此键则灯由上而下流动;P3.5:下,按此键则灯由下而上流动;程序如下:,#include reg51.h#include intrins.h#define uchar unsigned char#define uint unsigned int uchar LampCode1=0 x01;bitU

11、pDown=0;/上下流动标志bitStartEnd=0;/起动及停止标志/*延时程序由Delay参数确定延迟时间*/void mDelay(unsigned int Delay)unsigned int i;for(;Delay0;Delay-)for(i=0;i124;i+);,void KProce(uchar KValue)/键值处理if(KValue,uchar Key()uchar KValue;uchar tmp;P3|=0 x3c;/将P3口的接键盘的中间四位置1 KValue=P3;KValue|=0 xc3;/将未接键的4位置1 if(KValue=0 xff)/中间4位均

12、为1,无键按下 return(0);/返回 mDelay(10);/延时10ms,去键抖 KValue=P3;KValue|=0 xc3;/将未接键的4位置1 if(KValue=0 xff)/中间4位均为1,无键按下 return(0);/返回/如尚未返回,说明一定有1或更多位被按下 for(;)tmp=P3;if(tmp|0 xc3)=0 xff)break;/等待按键释放 return(KValue);,void main()uchar KValue;/存放键值 uchar LampCode;/存放流动的数据代码 P1=0 xff;/关闭所有灯 LampCode=0 xfe;for(;)

13、KValue=Key();/调用键盘程序并获得键值 if(Kvalue)/如果该值不等于0 KProce(KValue);/调用键盘处理程序 if(StartEnd)/要求流动显示 P1=LampCode;if(UpDown)/要求由上向下 LampCode=_cror_(LampCode,1);else/否则要求由下向上 LampCode=_crol_(LampCode,1);mDelay(500);/延时 else/关闭所有显示 P1=0 xff;,程序实现;程序分析:参见P173(KEY1),8.3 I2总线接口,单片机应用系统的外围扩展已从并行方式过度到以串行方式为主的时代.常用串行接

14、口方式有UART,SPI,I2C等,URAT接口技术已在第六章作过介绍,SPI将在下一节介绍,本节介绍I2C总线扩展技术.,8.3.1 I2C接口技术,I2C总线是一种用于IC器件之间连接的二线制总线.它通过SDA和SCL两根线与连接到总线上的器件之间传送信息.总线上每一个固定的节点地址,根据地址识别每个器件,可以方便地构成多机系统和外围器件扩展系统.其传输速率为100kb/s(改进后的规范为400kb/s),总线的驱动能力为400pF.,I2C总线为双向同步串行总线,引此,I2C总线接口内部为双向传输电路.I2C总线端口输出为开漏结构,故总线必须要有510k的上拉电阻.,接到总线上的所有外围

15、器件,外设接口都是总线上的节点.任何时候总线上只有一个主控制器件实现总线的控制操作,对总线上的其它节点寻址,分时实现点对点的数据传送.,8.3.1 I2C接口技术,I2C总线上所有的外围器件都有规范的器件地址.器件地址由7位组成,它与1位方向位构成I2C总线器件的寻址字节SLA.其格式如表8-2所列.,表8-2 I2C总线器件的寻址字节SLA,器件地址(DA3,DA2,DA1,DA0):-I2C总线外围接口器件固有的地址编码.引脚地址(A2,A1,A0):-由I2C总线外围器件地址端口A2,A1和A0在电路 中接电源或接地的不同所形成的地址数据.数据方向(R/W):-数据方向位规定了总线上主节

16、点对从节点数据方向,为1 时是接收,为0时是发送.,80C51单片机并未提供I2C接口,但是,基于对I2C协议的分析,可以通过软件模拟的方法来实现I2C接口,从而可以应用于很多I2C器件.,8.3.2 24系列EEPROM的结构及特性,随着非易失性存储器技术的发展,EEPROM常被用于断电后的数据存储.目前应用广泛的是串行接口的EEPROM,其中 A24CXX就是这样一类芯片.24系列EEPROM的结构和特性介绍如下.,1.特点介绍,*型号24C01(A)/02(A)/04(A)/08/16/32/64;*容量-128/256/512/1024/2048/4096/8192字节;*串行接口,可

17、用电擦除的可编程只读存储器这种器件有两种写入方式:-字节写入;页写入;页的大小取决于页寄存储 器的大小;擦除/写入次数:-一般在10万次以上,有的达1000万次.,2.引脚图(参见图8-8:左边),SCL:串行时钟端.写入用上升沿,输出用下降沿同步;SDA:串行数据输入/输出端.该引脚是漏极开路驱动,可以与任何数目的其它漏极或集电极开路的器 件构成“线或”连接;WP:写保护,即对硬件数据的保护.接地时;接高电平A0,A1,A2:片选或页面选择地址输入;VCC:电源端;VSS:接地端;,8.3.2 24系列EEPROM的结构及特性,3.串行EEPROM芯片寻址,在一条I2C总线上可以挂接多少具有

18、I2C接口的器件.在一次传送中,单片机所送出的命令或数据只能被其中的某一个器件接收并执行.为此,所有串行I2C接口都必需有一个8位含有芯片地址的控制字.这个控制字可以确定本芯片是否被选通,以及将进行读还是写的操作.控制字节的前4位:是针对不同类型器件的特征码.控制字的第8位:是读/写选择位,以决定微处理器对EEPROM进行读还是写操作.该位为“1”读操作;该位为“0”-写操作.控制字的其它三位:在不同容量的芯片中有不同的定义.基本作用:A0,A1,A2:片选或页面选择地址输入;在24系列EEPROM的小容量芯片里,使用1字节来表示存储单元的地址;但对于容量大于256字节的芯片,用1字节来表示地

19、址就不够了.为此采用两种方法:第一种方法:利用控制字3位来定义,具体参见表8-3所列(针对4Kb512字节到16Kb2KB的芯片)第二种方法:把指令中的存储地址由1字节改为2字节.(针对32KB以上的EEPROM芯片)注:当A0,A1,A2引脚被用于存储单元地址时,则作片选的能力就会相应减少.参见表8.3,8.3.3 24系列EEPROM的使用,由于80C51单片机没有硬件I2C接口,因此,必须用软件模拟I2C接口的时序,以便对24系列芯片进行读/写等编程操作.由于I2C接口协议比较复杂,从I2C总线结构原理到I2C总线应用的直接设计难度较大;因此这里不对I2C总线接口原理进行分析,而是学习如

20、何使用成熟的软件包对24系列EEPROM进行编程操作.这个软件包提供了从EEPROM中读出数据和向EEPROM中写入数据的两个函数:void WrToROM(uchar Data,uchar Address,uchar Num)void RdFromROM(uchar Data,uchar Adress,uchar Num)每一个函数读用三个参数,各有何作用参见P176;软件包的源程序参见P177180;使用这一软件包非常简单,首先根据硬件连接定义好SCL,SDA和WP这三个引脚,然后在调用函数中定义一个数组,用以存放待写入的数据,或读出数据之后用来存放数据;最后调用相关函数即可完成相应操作.

21、(参见9.3节介绍),8.4 X5045的使用,SPI是MOTOROLA公司推出的串行扩展接口.目前,有很多器件具有这种接口,其中X5045目前应用广泛的芯片.X5045芯片的功能:-上电复位,电压跌落检测,看门狗定时器,SPI 接口的EEPROM.通过学习这块芯片与电片机接口的方法,可以了解和掌握SPI总线接口的工作原理及一般编程方法.,8.4.1 SPI串行总线简介,单片机与外围扩展器件在时钟线SCK,数据线MOSI和MISO上都是同名端相连.由于外围扩展多个器件时,无法通过数据线译码选择,故带SPI接口的外围器件都有片选端CS.在扩展单个外围器时,外围器件的CS端可接地处理,或通过I/O

22、来控制;在扩展多个SPI外围器件时,单片机应分别通过I/O口线来分时选通外围器件.SPI的数据传送速度,主机方式最高可达1.5Mb/S.在单个器件的外围扩展中片选线由外部硬件端口选择,因此用软件实现起来较方便.,8.4.2 X5045的结构和特性,1.功能描述 本器件将4种功能合于一体:(1)上电复位控制:-参见P180(2)看门狗定时器:-参见P180(3)降压管理(电压跌落检测):-参见P181(4)具有块保护功能的串行EEPROM:-参见P181 使用该片有助于简化应用系统的设计,减少印制板的占用面积,提高可靠性.,图8-9 是该芯片的8脚PDIP/SOIP/MSOP封装形式的引脚图.,

23、8.4.2 X5045的结构和特性,表8-4是X5045芯片引脚功能的说明,8.4.2 X5045的结构和特性,2.使用方法-参见P182(1)上电复位(2)电压跌落检测(3)看门狗定时器(4)SPI串行编程EEPROM X5145中有一个状态寄存器,其值决定了看门狗定时器的定时时间和被保护块的大小.状态寄存器的定义如表8-5所列,定时时间长短及被保护区域则如表8-6和8-7所列.-参见P182,8.4.3 X5045的使用,为了使用方便,特设计了一个X5045的确驱动程序.组成驱动程序出口界面的命令如下:,*写数据(write_data):-将指定个数的字节写入EEPROM中指定单片机单元中

24、.*读数据(read_data):-读出EEPROM中指定单片机单元中的指定数据.*设置芯片的工作状态(set_state):-通过预设的常数设置芯片的工作状态.八个设置芯片工作状态的常数如下:WDT200-设置200ms看门狗;WDT600-设置600ms看门狗;WDT1400-设置1.4s看门狗;NOWDT-看门狗禁运;PROQTR-写保护区域为高128字节;PROHALF-写保护区域为高256字节;PROALL-不对存储区进行写保护;程序中定义符号如下:CS-接X5045CS引脚的单片机引脚;SI-接X5045SI引脚的单片机引脚;SO-接X5045SO引脚的单片机引脚;SCK-接X50

25、45SCK引脚的单片机引脚;WP-接X5045WP引脚的单片机引脚;,8.4.3 X5045的使用,X5045完整的驱动程序如下:-参见P183186使用这因软件包方法:首先:根据硬件连接定义SI,SO,SCK,WP和CS这5个引脚;然后:在调用函数中定义一个数组,用以存放待写入数据或读出之 后存放数据组的单元;最后:调用相关函数即可完成相应操作;,8.5 模/数转换接口,工业控制和智能化仪表中,常由单片机进行实时控制及实时数据处理.单片机分析和处理的信息是数字量,而被控制和测量对象的有关参量往往是连续变化的模拟量,单片机要处理这种信号,首先必须将模拟量转换成数字量,这一转换过程就是模/数转换

26、.A/D转换器的种类非常多,这里以具有串行接口的A/D转换器为例介绍其用法.TLC0831是德州仪器公司出品的8位串行A/D,其特点是:*8位分辨率;*单通道;*5V工作电压下其输入电压可达5V;*输入/输出电平与TTL/COMS兼容;*工作频率为250KHZ时,转换时间为32s.,8.5 模/数转换接口,图8-10是该器件的引脚图.CS:-片选端;IN+:-正输入端;(可接入差分信号)IN-:-负输入端;(输入单端信号时接地)REF:-参考电压输入端;DO:-数据输出端;CLK:-时钟信号端;(该两脚用于与CPU通信),图8-11 80C51与TLC0831接线图CS:-为低,开始一次转换(

27、整个转换过程中CS读必须为低)连续输入10个脉冲完成一次转换,然后数据从第2个 脉冲的下降沿开始输出.转换结束后应将CS置高.当CS重新拉低时将开始新的一次转换;,8.5 模/数转换接口,TLC0831的驱动程序:-参见P187188驱动程序的使用:-(该程序中用到了3个标记符号)ADCS:-与TLC0831的CS引脚相连的单片机引脚;ADCLK:-与TLC0831的CLK引脚相连的单片机引脚;ADDO:-与TLC0831的DO引脚相连的单片机引脚;实际使用时,根据接线的情况定义好ADCW,ADCLK和ADDO即可使用.例8-4 TLC0831与单片机连接如图8-11所示,要求获得TLC083

28、1的IN+端输入值.(本程序如下)sbit ADCS=P10;sbit ADCLK=p11;sbit ADDO=P12;Void main()unsigned char ADValue;.ADValue=ADConv();,8.6 数/模转换接口,由单片机运算处理的结果(数字量)往往也需要转换为模拟量,以便控制对象.这一过程即为“数/模转换”(D/A转换).目前,应用较多的是具用串行接口的D/A转换器,这里以TLC5615为例做介绍.TCL5615是带用3线串行接口且具有缓冲输入的10位DAC,输出可达2倍Ref的变化范围.其特点如下:*5V单电源工作;*3线制串行接口;*高阻抗基准输入;*电

29、压输出可达基准电压的2倍;*内部复位;,8.6 数/模转换接口,图8-12 TLC5615的引脚图*DIN:-串行数据输入端;*SCLK:-串行时钟输入端;*CS:-片选信号;*DOUT:-串行数据输出端,用于级连;*AGND:-模拟地;*REFIN:-基准电压输入;*OUT:DAC模拟电压输出端;*VDD:电源端;,图8-13 是单片机与TLC5615的接线图,8.6 数/模转换接口,TLC5615的驱动程序命令:DAConv.参数:整型数DaDat是待转换的数据出口:将给定的数转换为模拟电压.void DaConv(uint DaDat)uchar i=0;DaCS=1;_nop_();_

30、nop_();DIN=0;DaSCLK=0;DaCS=0;_nop_();_nop_();for(i=0;i12;i+)DaDat=_iro1_(DaDat,1);if(DaDat,DaSCLK=1;_nop_();_nop_();DaSCLK=0;_nop_();_nop_();DaCS=1;DIN=0;DaSCLK=0;,8.6 数/模转换接口,驱动程序的使用该驱动程序中用到了3个标记符号:DIN:-与TLC5615的DI引脚相连的单片机引脚;DASCLK:-与TLC5615的CLK引脚相连的单片机引脚;DACS:-与TLC5615的CS引脚相连的单片机引脚;实际使用时,根据接线的情况定义

31、好DAIN,DACLK,ADCS即可使用.,例8-5 TLC5615与单片机连接如图8-13所示,要求将经过处理的数据送到DA进行转换.程序如下:sbit DIN=P10;sbit DaSCLK=P11;sbit DaCS=P12;.,Void main()unsigned int DaDate;.,DAConv(DaDate);.,8.7 液晶显示器接口,从液晶显示器显示内容来分(三种):段式;字符式;点阵式.注:字符式-价廉物美,显示内容丰富,无需定制,使用方便.是LED显示器的理想替代品.(图8-14 是1602型字符液晶显示器的外形图),8.7.1 字符型液晶显示器基本知识 字符型液晶

32、显示器专门用于显示数字字母,图形符号,并可显示少量自定义符号.这类显示器均把LCD控制器,点阵驱动器,字符存储器等做在一块板上,再与液晶屏一起组成一个显示块,因此,这类显示器安装与使用都较简单.型号:XXX1602,XXX1604,XXX2002 XXX2004等XXX:-为商标名称;第一,二位数字:-表可显示字符个数;第三,四位数字:-表可显示字符的行数;,8.7 液晶显示器接口,这一类液晶显示器通常有16根接口线,表8-8是这16根线的定义.,表8-8 字符型液晶接口说明,8.7 液晶显示器接口,图8-15 是字符型液晶显示器与单片机的接线图.这里用了P0口的8根线作为液晶显示器的数据线,

33、用P2.5,P2.6和P2.7作为3根控制线.与VL端相连的电位器的阻值为10K,用来调节液晶显示器的对比度.5V电源通过一个电阻与BLA相连用以提供背光,该电阻可用10,1/2W.,8.7.2 字符型液晶显示器的使用,1.字符型液晶显示器的驱动程序(适用于1602型)命令如下:(1)void RstLcd()初始化液晶命令:设置控制器的工作模式,程序开始时调用.参数无.(2)Void ClrLcd()-清屏命令:清除屏幕显示的所有内容,参数无.(3)Void SetCur(uchar Para)-光标控制命令:控制光标是否显示及是否闪烁,参数:1个.注:程序中预定义了4个符号常数,用此4个符

34、号常数作为参数即可.它们定义如下:Const uchar NoDisp=0;/无显示Const uchar NoCur=1;/有显示无光标Const uchar CurNoFlash=2;/有光标但不闪烁Const uchar CurFlash=3;/有光标且闪烁,8.7.2 字符型液晶显示器的使用,1.字符型液晶显示器的驱动程序(适用于1602型)命令如下:(4)void WriteChar(uchar c,uchar xPos,uchar yPos)-写字符命令:在指定位置(行和列)显示指定的字符.参数:共有三个,即待显示字符,行值和列值.它们分别存放在字符C和XPOS,YPOS中,其中行

35、值与列值均从0开始计数.(5)void WriteString(uchar*s,uchar xPos,uchar yPos)-写字符串命令:在指定位置显示一串字符.参数:共有三个,即字符串值针s,行值和列值.字符串须以“0“结尾.如果字符串的长度超过了从该列开始可显示的最多字符数,则其后字符被截断,并不在下一行显示出来.注:完整的驱动程序请参见P193196,8.7.2 字符型液晶显示器的使用,2.液晶显示驱动程序的使用 只要在主函数中定义好xPos和yPos两个变量,同时定义一个字符数组或字符型指针,然后调用此液晶显示函数,即可将数组中的字符在液晶显示器规定的位置显示出来.,Void main()uchar xPos,yPos;uchar*s=“Welcom!”;xPos=0;yPos=1;RstLcd();ClrLcd();SetCur(CurFlash);/开启光标显示,闪烁 WriteString(s,xPos,yPos);for(;);,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号