




已阅读5页,还剩131页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微控制器应用技术II,高级应用技术,微控制器应用技术,微控制器应用技术主要内容,单片机内部资源基本应用,单片机应用技术提升,按键键盘辨识技术,显示技术(数码管、液晶),AD、DA转换技术,电机驱动技术,定时芯片温度采集数据存储,汇编语言与C51,电子钟设计,远距数据传送,密码锁的设计,数字电压表设计,信号发生器设计,AVR单片机应用定时器直流电机转速PWM控制一线数据采集,基于单片机的电子钟的设计,硬件设计单片机最小系统数码管LCD液晶按键定时芯片软件设计显示控制程序按键信息读取程序定时程序数据处理程序,八位数码管显示,八位数码管显示格式,共阴极数码管,共阳极数码管,八段管脚送上显示字符字形码,公共端送低电平,八段管脚送上显示字符字形码,公共端送高电平,多位是数码管,轮流向数码管八段管脚送字型码,向显示位的公共端送低(高)电平,八位数码管显示,数码管与单片机连接最小系统数码管的限流与驱动,八位数码管显示,数码管与单片机连接,八位数码管显示,显示程序原理,RAM地址+0+1+2+3+4+5+6+7,EEPROM地址,字形码表,显示的字符,+0+1+2+3+4+5+6+7+8+9+10,字符0123456789,字形码,位码,显示器,位码表,八位数码管显示,显示程序,P0口,P2口,unsignedcharcodeZXMtable11=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xbf;unsignedcharcodeWMtable8=0 x01,0 x02,0 x04,0 x08,0 x10,0 x20,0 x40,0 x80;unsignedcharDisplayBuff8=2,3,10,5,9,10,5,6;voidDisplay(void)unsignedchari;for(i=0;i0;n-)_nop_();/*延时1MS*/voidDelay1Ms(void)Delay1Us(1000);,LCD驱动程序,/*LCD写数据*参数WDLCM,向LCD写入的数据*/voidLCD_Write_Data8(ucharWDLCM)LCD_RS=1;LCD_RW=0;LCD_E=1;/若晶振速度太高可以在这后加小的延时LCD_Data=WDLCM;LCD_E=0;Delay1Ms();Delay1Ms();/*LCD写命令*BuysC为0时忽略忙检测参数WCLCM,向LCD写入的命令*/voidLCD_Write_Command8(ucharWCLCM)LCD_RS=0;LCD_RW=0;LCD_E=1;LCD_Data=WCLCM;LCD_E=0;Delay1Ms();Delay1Ms();,向数据寄存器DR写入一个字符代码(ASCII码),向指令寄存器IR写入一条命令,LCD1602驱动,四位数据传送方式,#include#include#defineucharunsignedchar#defineuintunsignedint#defineLCD_DATAP0sbitLCD_RS=P00;sbitLCD_RW=P01;sbitLCD_E=P02;voidDelay1Us(intn)for(;n0;n-)_nop_();,/*延时1MS*/voidDelay1Ms(void)Delay1Us(1000);voidLCD_en_write(void)LCD_E=0;LCD_E=1;Delay1Us(1);LCD_E=0;,voidLCD_Write_Command4(ucharcommand)Delay1Us(16);LCD_RS=0;/选择指令寄存器LCD_RW=0;LCD_DATA,voidLCD_Write_Data4(ucharData1)Delay1Us(16);LCD_RS=1;/选择数据寄存器LCD_RW=0;LCD_DATA,向指令寄存器IR写入一个命令,向数据寄存器DR写入一个字符代码(ASCII码),期望得到LCD的驱动,在LCD的某一位置显示一个字符;或从LCD某一位置开始显示一个字符串,voidLCD_Write_Char(ucharx,uchary,ucharDData);voidLCD_Write_Str(ucharx,uchary,uchar*s);,x,y显示字符的坐标x:015;y:01,DData字符的ASCII码,s指向字符串的指针变量,要将x,y换算成DDRAM的地址00H0FH,或40H4FH,写入命令寄存器,再将数据DData写入数据寄存器,/*设置光标位置函数*x列坐标015y行坐标01*/voidLCD_set_xy(ucharx,uchary)ucharaddress;if(y=0)address=0 x80+0 x00+x;elseaddress=0 x80+0 x40+x;LCM_Write_Command8(address);/*在某位置显示一个字符*x列坐标015y行坐标01DData1显示字符的ASCII码*/voidLCD_Write_Char(ucharx,uchary,ucharDData)LCD_set_xy(x,y);LCD_Write_Data8(DData);,/*从某位置开始显示字符串*x列坐标015y行坐标01s指针变量s指向显示字符串*/voidLCD_Write_Str(ucharx,uchary,uchar*s)LCD_set_xy(x,y);while(*s)LCD_Write_Data8(*(s+);,八位数据传送的驱动,/*设置光标位置函数*x列坐标015y行坐标01*/voidLCD_set_xy(ucharx,uchary)ucharaddress;if(y=0)address=0 x80+x;elseaddress=0 xc0+x;LCM_WriteCommand4(address);/*在某位置显示一个字符*x列坐标015y行坐标01DData1显示字符的ASCII码*/voidLCD_Write_Char(ucharx,uchary,ucharDData)LCD_set_xy(x,y);LCD_Write_Data4(DData);,/*从某位置开始显示字符串*x列坐标015y行坐标01s指针变量s指向显示字符串*/voidLCD_Write_Str(ucharx,uchary,uchar*s)LCD_set_xy(x,y);while(*s)LCD_Write_Data4(*(s+);,四位数据传送的驱动,四LCD显示器的初始化,LCD使用之前须对它进行初始化,初始化可通过复位完成,也可在复位后完成,初始化过程如下:,清屏,功能设置,开关显示设置,输入方式设置,设置四位或八位、双行或单行、5*7或5*10点阵20H、24H、28H、2CH、30H、34H、38H、3CH,设置开/关显示、光标是否显示、字符是否闪烁08H0FH,设置光标左右移动、内容是否移动04H07H,01H,8.42LCD显示器与单片机的接口与应用,下图是LCD显示器与8051单片机的接口图,图中RT-1602C的数据线与8051的P0口相连,RS与8051的P2.0相连,R/W与8051的P2.1相连,E端与8051的P2.3相连。编程在LCD显示器的第一行、第一列开始显示“WelcometoFSPT”,第二行、第8列开始显示“8”。,P0.7,P2.2,P2.1,P2.0,P0.0,8051,DB0,DB7,E,RS,R/W,RT-1602,VL,BLK,BLK,RP=10K,OV,OV,+5V,R=10欧姆1/2W,+5V,/*LCD1602初始化*/voidLCD_Init8()LCD_Write_Command8(0 x30);LCD_Write_Command8(0 x30);LCD_Write_Command8(0 x30);LCD_Write_Command8(0 x38);/设置8位数据,2行5X7字符LCD_Write_Command8(0 x0C);/设置显示开、光标不显示、不闪烁LCD_Write_Command8(0 x01);/清屏LCD_Write_Command8(0 x06);/显示光标移动设置,#includeunsignedcharcodestr1=“WelcometoFSPT”;voidmain(void)LCD_Init8();LCD_Write_Str(0,0,str1);LCD_Write_Char(8,1,8);while(1);,LCD显示应用程序,LCD4位连接方式,voidmain()LCD_init4();while(1)LCD_Write_Str(0,0,str1);LCD_Write_Char(8,1,8);while(1);,voidLCD_init4()LCD_Write_Command4(0 x28);/LCD4位控制方式Delay1Us(40);LCD_Write_Command4(0 x28);LCD_Write_Command4(0 x0c);/开显示、光标不亮、字符不闪LCD_Write_Command4(0 x01);Delay1Ms();Delay1Ms();,编程练习,LCD第一行显示:LCD_CLOCK第二行显示:自己的班级学号,LCD1602电子秒表设计,1、电子秒表精确到0.01秒2、P3.7接一个开关,按钮按下,秒表开始计时,按钮松开秒表停止。3、当秒表停止时,第一行显示“TimeStop”;当秒表运行时,第一行显示“TimeRun”;,日历时钟芯片DS1302电子钟设计,一DS1302的主要性能指标,(1)DS1302实时时钟具有能计算2100年之前的秒、分、时、日、日期、星期、月、年的能力,还有闰年调整的能力。(2)内部含有31个字节静态RAM,可提供用户访问。(3)采用串行数据传送方式,使得管脚数量最少,简单3线接口。(4)工作电压范围宽:2.0V5.5V。(5)工作电流:2.0V时,小于300nA。(6)时钟或RAM数据的读/写有两种传送方式:单字节传送和多字节传送方式。(7)采用8脚DIP封装或SOIC封装。(8)与TTL兼容,Vcc=5V。(9)可选工业级温度范围:-40C+85C。(10)具有涓流充电能力。(11)采用主电源和备份电源双电源供应。(12)备份电源可由电池或大容量电容实现。,DS1302封装形式,二引脚功能DS1302的引脚如图所示,图DS1302引脚图,(CE),DS1302典型应用电路,DS1302内部结构图,电源控制,输入移位寄存器,命令和控制逻辑,实时时钟,静态RAM,晶振电路,三DS1302的寄存器及片内RAM,DS1302有一个控制寄存器、12个日历、时钟寄存器和31个RAM。,1控制寄存器,控制寄存器用于存放DS1302的控制命令字,DS1302的RST引脚回到高电平后写入的第一个字就为控制命令。它用于选择DS1302各寄存器及对其读写过程进行控制,它的格式如下:,其中:D7:固定为1D6:RAM/CK位,片内RAM或日历、时钟寄存器选择位。D5D1:地址位,用于选择进行读写的日历、时钟寄存器或片内RAM。对日历、时钟寄存器或片内RAM的选择见表。,80H、81H,82H、83H,84H、85H,86H、87H,88H、89H,8AH、8BH,8CH、8DH,8EH、8FH,90H、91H,BEH、BFH,C0H、C1H,FCH、FDH,FEH、FFH,.,控制命令,写读,2日历、时钟寄存器DS1302共有12个寄存器,其中有7个与日历、时钟相关,存放的数据为BCD码形式。日历、时钟寄存器的格式如表。,说明:(1)数据都以BCD码形式。(2)小时寄存器的D7位为12小时制/24小时制的选择位,当为1时选12小时制,当为0时选24小时制。当12小时制时,D5位为0是上午,D5位为1是下午,D4为小时的十位。当24小时制时,D5、D4位为小时的十位。(3)秒寄存器中的CH位为时钟暂停位,当为1时钟暂停,为0时钟开始启动。(4)写保护寄存器中的WP为写保护位,当WP=1,写保护,当WP=0未写保护,当对日历、时钟寄存器或片内RAM进行写时WP应清零,当对日历、时钟寄存器或片内RAM进行读时WP一般置1。,(5)慢充电寄存器:TCS位为控制慢充电的选择,当它为1010才能使慢充电工作。DS为二极管选择位。DS为01选择一个二极管,DS为10选择二个二极管,DS为11或00充电器被禁止,与TCS无关。RS用于选择连接在VCC2与VCC1之间的电阻,RS为00,充电器被禁止,与TCS无关.,3.片内RAMDS1302片内有31个RAM单元,对片内RAM的操作有两种方式:单字节方式和多字节方式。当控制命令字为C0HFDH时为单字节读写方式,命令字中的D5D1用于选择对应的RAM单元,其中奇数为读操作,偶数为写操作。当控制命令字为FEH、FFH时为多字节操作(表9.5中的RAM突发模式),多字节操作可一次把所有的RAM单元内容进行读写。FEH为写操作,FFH为读操作。,4、DS1302数据输入输出时序图,数据输入(单字节写入),数据输入是在控制字输入后的下一个SCLK时钟的上升沿时数据被写入DS1302,数据输入从低位即位0开始。,命令控制字,输入的数据,数据输出,数据输出是在8位控制指令字后的下一个SCLK脉冲的下降沿输出数据,输出数据时从低位0位至高位7依次输出。需要注意的是,第一个数据位是在控制字的最后一位之后的第一个下降沿被输出。此时只要保持CE高电平,如果有额外的SCLK周期,将重新发送数据字节,即多字节传送模式。,DS1302通过RST引脚驱动输入输出过程,当置RST高电平启动输入输出过程:(1)在SCLK时钟的控制下,首先把控制命令字写入DS1302的控制寄存器,用于选择内部时钟寄存器或RAM;(2)根据写入的控制命令字,依次读写内部寄存器或片内RAM单元的数据;按(1)、(2)顺序可以读写一个日历、时钟寄存器或RAM;如果(1)写入控制命令字为0BEH或0BFH,则(2)一次连续写或读所有的日历、时钟寄存器共8个字节时钟突发模式;如果(1)写入控制命令字为0FEH或0FFH,则(2)一次连续写或读所有的RAM共31个字节RAM突发模式;当数据读写完后,RST变为低电平结束输入输出过程。,4DS1302的输入输出过程,四、DS1302与单片机的接口,DS1302与单片机的连接仅需要3条线:时钟线SCLK、数据线I/O和复位线RST。连接图如图9.18。时钟线SCLK与P3.1相连,数据线I/O与P3.0相连,复位线RST与P3.2相连。,图中DS1302的驱动程序。,DS1302驱动:,#include#defineucharunsignedcharsbitT_CLK=P10;sbitT_IO=P11;sbitT_RST=P12;sbitACC0=ACC0;sbitACC7=ACC7;voidClock(void)T_CLK=0;T_CLK=1;/产生上升沿T_CLK=0;/产生下降沿,/*名称:ReadB功能:从DS1302读出1字节数据输入:无返回值:ACC进入函数前,T_CLK=0*/ucharReadB(void)uchari;for(i=8;i0;i-)ACC=ACC1;ACC7=T_IO;/读入数据Clock();return(ACC);,/*名称:WriteB功能:往DS1302写入1字节数据输入:ucDa返回值:无进入函数前,T_CLK=0*/voidWriteB(ucharucDa)uchari;ACC=ucDa;for(i=8;i0;i-)T_IO=ACC0;/数据送入IOClock();ACC=ACC1;,/*名称:v_W1302功能:单字节写,往DS1302某寄存器写入命令/数据,先写命令,后写数据调用:WriteB()输入:ucAddr,ucDa返回值:无*/voidv_W1302(ucharucComm,ucharucDa)T_RST=0;T_CLK=0;/时钟准备T_RST=1;/开始WriteB(ucComm);/写入命令WriteB(ucDa);/写入数据T_CLK=1;T_RST=0;/停止,/*名称:uc_R1302功能:单字节读,读取DS1302某寄存器的数据,先写命令,后读数据调用:WriteB(),ReadB()输入:ucCommDS1302命令返回值:ucDa*/ucharuc_R1302(ucharucComm)ucharucDa;T_RST=0;T_CLK=0;T_RST=1;WriteB(ucComm);/写入命令ucDa=ReadB();/读出数据T_CLK=1;T_RST=0;return(ucDa);,/*名称:v_BurstW1302T说明:日历、时钟多字节写,先写命令,后写数据功能:往DS1302写入时钟数据调用:WriteB()输入:pSecDa(指向时钟数据地址)格式为秒、分、时、日、月、星期、年、控制返回值:无*/voidv_BurstW1302T(uchar*pSecDa)uchari;v_W1302(0 x8e,0 x00);/消除写保护WP=0T_RST=0;T_CLK=0;T_RST=1;WriteB(0 xbe);/多字节时钟写命令for(i=8;i0;i-)WriteB(*pSecDa);pSecDa+;T_CLK=1;T_RST=0;,/*名称:v_BurstR1302T功能:读取DS1302时钟数据,先写命令,后读命令/数据(时钟多字节方式)调用:WriteB(),ReadB();输入:pSecDa(指向时钟数据地址)格式为秒、分、时、日、月、星期、年返回值:无*/voidv_BurstR1302T(uchar*pSecDa)uchari;T_RST=0;T_CLK=0;T_RST=1;WriteB(0 xbf);/多字节时钟读命令for(i=8;i0;i-)*pSecDa=ReadB();pSecDa+;T_CLK=1;T_RST=0;,/*名称:v_BurstW1302R说明:RAM多字节写,先写命令,后写数据功能:往DS1302的RAM写入数据调用:WriteB()输入:pSecDa(指向RAM数据地址)返回值:无*/voidv_BurstW1302R(uchar*pSecDa)uchari;v_W1302(0 x8e,0 x00);T_RST=0;T_CLK=0;T_RST=1;WriteB(0 xfe);for(i=31;i0;i-)WriteB(*pSecDa);pSecDa+;T_CLK=1;T_RST=0;,/*名称:v_BurstR1302R功能:读取DS1302RAM数据,先写命令,后读数据(RAM多字节方式)调用:WriteB(),ReadB();输入:pSecDa(指向RAM数据地址)返回值:无*/voidv_BurstR1302R(uchar*pSecDa)uchari;T_RST=0;T_CLK=0;T_RST=1;WriteB(0 xff);for(i=31;i0;i-)*pSecDa=ReadB();pSecDa+;T_CLK=1;T_RST=0;,/突发写入RAM命令,/突发读出RAM命令,/*名称:v_Set1302功能:设置初始时间调用:v_W1302();输入:pSecDa(指向初始时间地址),时间格式:秒、分、时、日、月、星期、年、写保护返回值:无*/voidv_Set1302(uchar*pSecDa)uchari;ucharucCom=0 x80;v_W1302(0 x8e,0 x00);/取消写保护for(i=8;i0;i-)v_W1302(ucCom,*pSecDa);ucCom+=2;pSecDa+;v_W1302(0 x8e,0 x80);/写保护,/*名称:v_Get1302功能:读取当前时间调用:uc_R1302();输入:ucCurtime(指向初始时间地址),时间格式:秒、分、时、日、月、星期、年返回值:无*/voidv_Get1302(ucharucCurtime)uchari;ucharucCom=0 x81;for(i=0;i=1;TIMECLK=1;/时钟上升沿TIMECLK=0;/时钟下降沿,DS1302的软件设计,/*读写DS1302DS1302clock下降沿输出数据*/ucharTimeSpiRead()uchari,result=0;TIMEIO=1;for(i=0;i=1;if(TIMEIO)result=result|0 x80;TIMECLK=1;TIMECLK=0;TimeSpiClose();return(result);,DS1302的软件设计,/写DS1302寄存器voidTimeByteWrite(ucharaddress,ucharval)TimeSpiOpen();TimeSpiWrite(address);TimeSpiWrite(val);TimeSpiClose();,/读DS1302寄存器ucharTimeByteRead(ucharaddress)ucharm;TimeSpiOpen();TimeSpiWrite(address);m=TimeSpiRead();TimeSpiClose();return(m);,DS1302的软件设计,/读DS1302RAMucharTimeRamByteRead(ucharaddress)TimeSpiOpen();TimeSpiWrite(address1)|0 xc1);/?address=TimeSpiRead();TimeSpiClose();returnaddress;,/写DS1302RamvoidTimeRamByteWrite(ucharaddress,ucharval)TimeSpiOpen();TimeSpiWrite(address1)|0 xc1);TimeSpiWrite(val);TimeSpiClose();,DS1302的软件设计,显示函数及延时函数,ucharcodeDisTab11=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xbf;ucharDisBuf8=1,2,10,4,5,10,7,8;voiddelay()uinti;for(i=0;i100;i+);voidDisplay()uchari,n=0 xfe;for(i=0;i8;i+)P0=0 xff;P2=0 xff;P0=DisTabDisBufi;P2=n;n=n1|0 x01;delay();,DS1302的软件设计,时分秒和年月日变换函数,ucharhour,min,sec;ucharAge,Mon,Data;voidDataChange()DisBuf0=sec,voidAgeDatachange()DisBuf0=Data,DS1302的软件设计,sbitsw=P10;sbitGOSTOP=P11;voidGoStop()ucharm;m=TimeByteRead(0 x81);if(GOSTOP)m=m|0 x80;elsem=m,voidTimeRead()Age=TimeByteRead(0 x8D);Mon=TimeByteRead(0 x89);Da
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论