C51单片机C语言程序100例_第1页
C51单片机C语言程序100例_第2页
C51单片机C语言程序100例_第3页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录目录 1 函数的使用和熟悉 */4实 例 3 : 用 单 片 机 控 制 第 一 个 灯 亮 4实 例 4 : 用 单 片 机 控 制 一 个 灯 闪 烁 : 认 识 单 片 机 的 工 作 频 率4实例 5:将 P1口状态分别送入 P0、P2、P3 口:认识 I/O 口的引脚功能 5实 例 6 : 使 用 P3 口 流 水 点 亮 8 位. 例DE5L.实过实间 实果 实果 实果 实样 实果 实口数操 的 址 地例10:用P0 、P19例11:用P1、P09例12 :用自增运10算 算控例13:用P0口显例 9 : 用 P0 口8P1口制逻 示实果实果 实果作控加8 亮 点 水 流烁 闪

2、 灯 制运 法 减 和 法位时结花 水 流 D E结 算 运 件 条 示 显 口 P0 用结 算 运 或 异结 算 运 移 左实例 LED18:用右移运算12流水点亮P1口8实例19 :用 if 语 句控制P0口8位LED的流水13实例20 :用 swtich 语 句的控制P0 口8位LED的点亮1311制控蜂鸣器鸣笛位方状次例 21用 for语句14实例LED22 :用while语句控制16实 例 23 :用 do-while语句控 制 P0口 8 位 LED 流 水 点实例24 :用字符型数组控制P0 口8位LED流水点亮.17实例25: 用 P0 口 显示字符串常量.18实例26:用 P

3、0 口 显 示指针运算结果19实例27 :用指针数组控制P0 口8位LED流水点亮.19实例28 :用数组的指针控制P0 口8位LED流水点亮.20实例29 :用 P0 、 P1 口显示整型函数返回值.21实例30 :用有参函数控制P0 口8位LED流水速度.22实例31:用数组作函数参数控制流水花样.23实例32 : 用 指 针 作 函 数 参 数 控制 P0口8位LED流水点亮16亮23灯花P1口实例33:用函数型指针控制样25实例34 :用指针数组作为函数的参数串26实例35 :字符函数例 .27实例36 :内部函数例 27实例37 :标准函数显应应应例.2838符串2939实例40:宏

4、定义应用举例2.30实 例 41 : 宏 定 义 应330中断、定* 31用举时例器实 烁.例42 : 用定时器31T0 查 询 方 式 P2 口 8位 控 制 LED闪实 频.例43 : 用定时器31T1 查 询 方 式 控 制 单 片机 发 出 1KHz音实 示.例44 : 将计数器32T0 计 数 的 结 果 送 P1口 8 位 LED显实 烁.例45 :用定时器 T0 的 中 断 控 制 331 位 LED闪实 时.例46 :用 定 时 器 T0 的 中 断 实34现长时间定实 烁.例47 : 用定时器34T1 中 断 控 制 两 个 LED以不同周期闪实 频.例48 : 用计数器36

5、T1 的 中 断 控 制 蜂 鸣器 发 出 1KHz音实 放.例49 : 用定时器36T0 的 中 断 实 现 " 渴 望 " 主 题 曲 的播实冲39例 50-1 :输 出 50 个矩形脉实 数.例50-2:计数 器 T0 统 计40外部脉冲实 度.例51-2 :定时器 T0 的 模 式 2 测 40量正脉冲宽实 波.例52 : 用定时器41T0 控 制 输 出 高 低 宽度不同的矩形实 集.例53 :用外中断 0 的 中 断 方 式 42进行数据采实 波.例54-1:输出 负 脉 宽 为 20043微秒的方实度例.4354-2:测量负脉冲宽实 亮4例55:方式 0 控

6、制 流 水4灯循环点实序例4556-1:数据发送程实序例4756-2:数据接收程实序例4757-1:数据发送程实序例57-2:数据接收程实例58 : 单 片机 向 PC 发 送据.50实例59 : 单 片 机接 收 PC 发 出 的据.51数数示 52实 例 60 : 用 LED5数码管显数码显示数字52实09.例61 :用LED 数 码 显 示 52器循环显示数字实例62 :用数码管慢速动态扫描显示数字"1234".53实例63 :用LED 数 码 显 示 器 伪静态显示数字123454实例64:用数码管显示动态检测结果 .54实例65:数码秒表设计 .56实例66:数码

7、时钟设计 .58实例67 :用LED 数 码 管 显 示计数器 T0的计数值.62实例68:静态显示数字63键盘控制实 验.例69:无软件消抖的独立64式键盘输入实实例70:软件消抖的独立式键盘输入实验.64实例71: CPU 控制的独立式键盘扫描实验.65实例72 :定时器中断控制的独立式键盘扫描实验.68实例73:独立式键盘控制的4级变速流水灯.71实例74 :独立式键盘的按键功能扩展:以一当四73实例75:独立式键盘调时的数码时钟实验.75实例76:独立式键盘控制步进电机实验.79实例77:矩阵式键盘按键值的数码管显示实验.82.85实例79:简易电子琴.86实例80:矩阵式键盘实现的电

8、子密码锁.92* 液晶显示 LCD* 液晶显示 LCD* 液晶显示 LCD* */.95实例 81: 用 LCD显示字符'A'96实例 82 :用 LCD 循环右移显示"WelcometoChina"99实例 83 :用 LCD 显 示适时检测结果 .102实例 84:液晶时钟设计 .106些芯片的使用*24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302红外遥控例85 :将 数 据 "0x0f" 写 入112AT24C02 再 读 出 送P1口显例86 :将 按 键 次 数 写 入 AT24C02, 再

9、读 出 并 用 1602LCD .117显例87 :对 I2C 总 线 上 挂124接 多 个 AT24C02 的读写操例88: 基 于 AT24C02 的多机通信读取程.174实钟 .177例98:基于DS1302的日实例99:单片机数据发时程设脉例88 :基 于 AT24C02133的多机通信写入程例90 :DS18B20 温度检测及其液晶显144例91 : 将数 据 "0xaa" 写入X5045 再 读出送 P1口显153例 92 : 将 流 水 灯 控 制 码写入X5045 并读出送 P1 口显.157例93 : 对SPI 总 线 上挂接 多 个 X5045的读写操

10、161例94:基于ADC0832 的数字电压.165例95: 用 DAC0832产生锯齿波电.171例96 :用 P1 口 显示红外遥控器的按键171例97 :用红外遥控器控制继电序 185实 例100 : 电 机 转 速计 186 模拟霍尔 冲 192函数的使用和熟悉h 应用举例 #include<> ; WriteData(digitD1); for(i=0;i<4;i+) delay(250); ; if(DeCode()=1)Function();if(DeCode()=1)Function();/ 如果满足条件,执行遥控功能EX0=1; / 开启外中断 EX0/ 9

11、8 DS1302/ 实例 98:基于 DS1302的日历时钟#include<>#include<>/ 包含单片机寄存器的头文件/ 包含 _nop_() 函数定义的头文件以下是 DS1302芯片的操作程序 */unsignedcharcodedigit10="09" / 定义字符数组显示数字 sbitDATA=P11;/位定义 1302 芯片的接口,数据输出端定义在引脚sbitRST=P12;/位定义 1302 芯片的接口,复位端口定义在引脚sbitSCLK=P10;/位定义 1302 芯片的接口,时钟输出端口定义在引脚/* 函数功能:延时若干微秒

12、入口参数: n*/ voiddelaynus(unsignedcharn)unsignedchari;for(i=0;i<n;i+)/* 函数功能:向 1302 写一个字节数据 入口参数: x voidWrite1302(unsignedchardat)unsignedchari;SCLK=0; / 拉低 SCLK,为脉冲上升沿写入数据做好准备delaynus(2);/ 稍微等待,使硬件做好准备for(i=0;i<8;i+)DATA=dat&0x01; delaynus(2);SCLK=1;delaynus(2);SCLK=0;dat>>=1;据位/ 连续写 8

13、 个二进制位数据/ 取出 dat 的第 0 位数据写入 1302/ 稍微等待,使硬件做好准备/ 上升沿写入数据/ 稍微等待,使硬件做好准备/ 重新拉低 SCLK,形成脉冲/ 将 dat 的各数据位右移 1 位,准备写入下一个数函数功能:根据命令字,向 1302 写一个字节数据 入口参数: Cmd,储存命令字; dat ,储存待写的数据voidWriteSet1302(unsignedcharCmd,unsignedchardat)RST=0;SCLK=0;RST=1; delaynus(2);Write1302(Cmd);Write1302(dat);SCLK=1;RST=0;/ 禁止数据传递

14、/ 确保写数居前 SCLK被拉低/ 启动数据传输/ 稍微等待,使硬件做好准备/ 写入命令字/ 写数据/ 将时钟电平置于已知状态/ 禁止数据传递函数功能:从 1302 读一个字节数据 入口参数: xunsignedcharRead1302(void)unsignedchari,dat;delaynus(2);/ 稍微等待,使硬件做好准备for(i=0;i<8;i+)/ 连续读 8 个二进制位数据dat>>=1; / 将 dat 的各数据位右移 1 位,因为先读出的是字节的最 低位if(DATA=1) / 如果读出的数据是 1dat|=0x80; / 将 1 取出,写在 dat

15、的最高位 SCLK=1; / 将 SCLK置于高电平,为下降沿读出 delaynus(2); / 稍微等待SCLK=0; / 拉低 SCLK,形成脉冲下降沿 delaynus(2); / 稍微等待returndat; / 将读出的数据返回 函数功能:根据命令字,从 1302 读取一个字节数据 入口参数: Cmd */unsignedchar ReadSet1302(unsignedcharCmd)unsignedchardat;RST=0; / 拉低 RSTSCLK=0;RST=1;Write1302(Cmd);dat=Read1302();SCLK=1;RST=0;returndat;/ 根

16、据写状态寄存器命令字,写/ 根据写秒寄存器命令字,写入/ 根据写分寄存器命令字,写入根据写小时寄存器命令字, 写入根据写日寄存器命令字, 写入日根据写月寄存器命令字, 写入月/ 根据写小时寄存器命令字,写*/ sbitRS=P20; sbitRW=P21; sbitE=P22; sbitBF=P07;/ 寄存器选择位,将 RS位定义为引脚 / 读写选择位,将 RW位定义为引脚/ 使能信号位,将 E 位定义为引脚 / 忙碌标志位,将 BF位定义为引脚以下是对液晶模块的操作程序SCLK被拉低/ 确保写数居前/ 启动数据传输/ 写入命令字/ 读出数据/ 将时钟电平置于已知状态/ 禁止数据传递/ 将读

17、出的数据返回/* 函数功能: 1302 进行初始化设置*/ voidInit_DS1302(void)WriteSet1302(0x8E,0x00);入不保护指令WriteSet1302(0x80,(0/10)<<4|(0%10);秒的初始值 WriteSet1302(0x82,(0/10)<<4|(0%10);分的初始值WriteSet1302(0x84,(12/10)<<4|(12%10);/ 小时的初始值WriteSet1302(0x86,(16/10)<<4|(16%10);/ 的初始值WriteSet1302(0x88,(11/10)&

18、lt;<4|(11%10);/ 的初始值WriteSet1302(0x8c,(8/10)<<4|(8%10);入 小时的初始值函数功能:延时 1ms(3j+2)*i=(3 ×33+2)×10=1010(微秒),可以认为是 1 毫秒voiddelay1ms()unsignedchari,j;for(i=0;i<10;i+)for(j=0;j<33;j+)/* 函数功能:延时若干毫秒入口参数: n */ voiddelaynms(unsignedcharn)unsignedchari;for(i=0;i<n;i+)delay1ms();函数功

19、能:判断液晶模块的忙碌状态 返回值: result 。result=1 ,忙碌 ;result=0 ,不忙 */ bitBusyTest(void)bitresult;RS=0;/ 根据规定, RS为低电平, RW为高电平时,可以读状态RW=1;E=1;/E=1 ,才允许读写_nop_(); / 空操作_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间 result=BF; / 将忙碌标志电平赋给 resultE=0; / 将 E 恢复低电平returnresult; /* 函数功能:将模式设置指令或显示地址写入液晶模块 入口参数: dictate voi

20、dWriteInstruction(unsignedchardictate)while(BusyTest()=1);/ 如果忙就等待RS=0;/ 根据规定, RS和 R/W同时为低电平时,可以写入指令RW=0;E=0; /E 置低电平(根据表 8-6 ,写指令时, E为高脉冲, / 就是让 E从 0到1发生正跳变,所以应先置 "0"_nop_();_nop_();/ 空操作两个机器周期,给硬件反应时间P0=dictate;/ 将数据送入 P0 口,即写入指令或地址_nop_();_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间E=1;

21、 /E 置高电平_nop_();_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间E=0; / 当 E 由高电平跳变成低电平时,液晶模块开始 执行命令/* 函数功能:指定字符显示的实际地址 入口参数: xvoidWriteAddress(unsignedcharx)WriteInstruction(x|0x80);/ 显示位置的确定方法规定为 "80H+地址码 x" /* 函数功能:将数据 (字符的标准 ASCII 码) 写入液晶模块 入口参数: y( 为字符常量 )*/ voidWriteData(unsignedchary) whi

22、le(BusyTest()=1);RS=1;/RS 为高电平, RW为低电平时,可以写入数据RW=0;E=0; /E 置低电平(根据表 8-6 ,写指令时, E为高脉冲,/ 就是让 E从 0 到 1 发生正跳变,所以应先置 "0" P0=y; / 将数据送入 P0 口,即将数据写入液晶模块 _nop_();_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间E=1; /E 置高电平_nop_();_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间E=0;/ 当 E由高电平跳变成低电平时,液晶模块开始执

23、行命令/* 函数功能:对 LCD的显示模式进行初始化设置voidLcdInitiate(void)delaynms(15);长的反应时间WriteInstruction(0x38); 位数据接口delaynms(5);WriteInstruction(0x38);delaynms(5);WriteInstruction(0x38);delaynms(5);WriteInstruction(0x0c); 烁delaynms(5);WriteInstruction(0x06); delaynms(5);WriteInstruction(0x01);delaynms(5);/ 延时 15ms,首次写

24、指令时应给 LCD一段较/ 显示模式设置: 16×2 显示,5×7 点阵, 8/ 延时 5ms ,给硬件一点反应时间/ 延时 5ms ,给硬件一点反应时间/ 连续三次,确保初始化成功/ 延时 5ms ,给硬件一点反应时间/ 显示模式设置:显示开,无光标,光标不闪/ 延时 5ms ,给硬件一点反应时间/ 显示模式设置:光标右移,字符不移/ 延时 5ms ,给硬件一点反应时间/ 清屏幕指令,将以前的显示内容清除/ 延时 5ms ,给硬件一点反应时间以下是 1302 数据的显示程序函数功能:显示秒入口参数: xvoidDisplaySecond(unsignedcharx)uns

25、ignedchari,j;i=x/10;/ 取十位 j=x%10;/ 取个位 WriteAddress(0x49); WriteData(digiti); WriteData(digitj); delaynms(50);/j,k,l 分别储存温度的百位、十位和个位/ 写显示地址 ,将在第 2行第 7列开始显示/ 将百位数字的字符常量写入 LCD/ 将十位数字的字符常量写入 LCD/ 延时 1ms给硬件一点反应时间函数功能:显示分钟入口参数: xvoidDisplayMinute(unsignedcharx)unsignedchari,j;i=x/10;/ 取十位 j=x%10;/ 取个位 Wr

26、iteAddress(0x46); WriteData(digiti); WriteData(digitj); delaynms(50);/j,k,l 分别储存温度的百位、十位和个位/ 写显示地址 ,将在第 2行第 7列开始显示/ 将百位数字的字符常量写入 LCD/ 将十位数字的字符常量写入 LCD/ 延时 1ms给硬件一点反应时间函数功能:显示小时 入口参数: xvoidDisplayHour(unsignedcharx)unsignedchari,j;i=x/10;/ 取十位 j=x%10;/ 取个位 WriteAddress(0x43); WriteData(digiti); Write

27、Data(digitj); delaynms(50);/j,k,l 分别储存温度的百位、十位和个位/ 写显示地址 ,将在第 2行第 7列开始显示/ 将百位数字的字符常量写入 LCD/ 将十位数字的字符常量写入 LCD/ 延时 1ms给硬件一点反应时间函数功能:显示日 入口参数: xvoidDisplayDay(unsignedcharx)unsignedchari,j;i=x/10;/ 取十位 j=x%10;/ 取个位 WriteAddress(0x0c); WriteData(digiti); WriteData(digitj); delaynms(50);/j,k,l 分别储存温度的百位、

28、十位和个位/ 写显示地址 ,将在第 2行第 7列开始显示/ 将百位数字的字符常量写入 LCD/ 将十位数字的字符常量写入 LCD/ 延时 1ms给硬件一点反应时间函数功能:显示月入口参数: xvoidDisplayMonth(unsignedcharx)unsignedchari,j;i=x/10;/ 取十位 j=x%10;/ 取个位 WriteAddress(0x09); WriteData(digiti); WriteData(digitj); delaynms(50);/j,k,l 分别储存温度的百位、十位和个位/ 写显示地址 ,将在第 2行第 7列开始显示/ 将百位数字的字符常量写入

29、LCD/ 将十位数字的字符常量写入 LCD函数功能:显示年入口参数: xvoidDisplayYear(unsignedcharx)unsignedchari,j;i=x/10;/ 取十位 j=x%10;/ 取个位 WriteAddress(0x06); WriteData(digiti); WriteData(digitj); delaynms(50);/j,k,l 分别储存温度的百位、十位和个位/ 写显示地址 ,将在第 2行第 7列开始显示/ 将百位数字的字符常量写入 LCD/ 将十位数字的字符常量写入 LCD/ 延时 1ms给硬件一点反应时间/ 延时 1ms给硬件一点反应时间LcdIni

30、tiate();WriteAddress(0x01);WriteData('D');WriteData('a');WriteData('t');WriteData('e');WriteData(':'); WriteAddress(0x08);WriteData('-'); WriteAddress(0x0b);WriteData('-');1 行第 2 列开始显示显示在第 1 行第 9 列显示在第 1 行第 12列函数功能:主函数*/ voidmain(void)unsignedc

31、harsecond,minute,hour,day,month,year; / 分别储存苗、分 小时,日,月,年unsignedcharReadValue; / 储存从 1302 读取的数据/ 将液晶初始化/ 写 Date 的显示地址 , 将在/ 将字符常量写入 LCD/ 将字符常量写入 LCD/ 将字符常量写入 LCD/ 将字符常量写入 LCD/ 将字符常量写入 LCD/ 写年月分隔符的显示地址,/ 将字符常量写入 LCD/ 写月日分隔符的显示地址,/ 将字符常量写入 LCDWriteAddress(0x45 );/ 写小时与分钟分隔符的显示地址, 显示在第 2 行第 6列/ 将字符常量写入

32、 LCDWriteData(':');WriteAddress(0x48 );/ 写分钟与秒分隔符的显示地址, 显示在第 2 行第 9 列/ 将字符常量写入 LCDWriteData(':');Init_DS1302();/ 将 1302 初始化while(1)ReadValue=ReadSet1302(0x81); / 从秒寄存器读数据 second=(ReadValue&0x70)>>4)*10+(ReadValue&0x0F);/ 将读出数据转化 DisplaySecond(second); / 显示秒ReadValue=Rea

33、dSet1302(0x83); / 从分寄存器读 minute=(ReadValue&0x70)>>4)*10+(ReadValue&0x0F);/ 将读出数据转化 DisplayMinute(minute); / 显示分ReadValue=ReadSet1302(0x85); / 从分寄存器读 hour=(ReadValue&0x70)>>4)*10+(ReadValue&0x0F);/ 将读出数据转化 DisplayHour(hour); / 显示小时ReadValue=ReadSet1302(0x87); / 从分寄存器读 day=

34、(ReadValue&0x70)>>4)*10+(ReadValue&0x0F);/ 将读出数据转化 DisplayDay(day); / 显示日ReadValue=ReadSet1302(0x89); / 从分寄存器读 month=(ReadValue&0x70)>>4)*10+(ReadValue&0x0F);/ 将读出数据转化 DisplayMonth(month); / 显示月ReadValue=ReadSet1302(0x8d); / 从分寄存器读 year=(ReadValue&0x70)>>4)*10+(

35、ReadValue&0x0F);/ 将读出数据转化 DisplayYear(year); / 显示年/ 99/ 实例 99:单片机数据发送程序#include<> / 包含单片机寄存器的头文件函数功能:向 PC发送一个字节数据* voidSend(unsignedchardat)SBUF=dat;while(TI=0)TI=0;/* 函数功能:延时 1ms(3j+2)i=(3 ×33+2) ×10=1010(微秒) ,可以认为是 1 毫秒 */ voiddelay1ms()unsignedchari,j;for(i=0;i<10;i+)for(j=

36、0;j<33;j+)函数功能:延时若干毫秒voiddelaynms(unsignedcharx) unsignedchari;for(i=0;i<x;i+) delay1ms();/* 函数功能:主函数*/voidmain(void)unsignedchari;TMOD=0x20; / 定时器 T1 工作于方式 2TH1=0xfd; / 根据规定给定时器 T1 赋初值TL1=0xfd; / 根据规定给定时器 T1 赋初值PCON=0x00; / 波特率 9600TR1=1; / 启动定时器 t1SCON=0x40; / 串口工作方式 1while(1)for(i=0;i<20

37、0;i+)/ 模拟检测数据Send(i);/ 发送数据 idelaynms(100); /100ms 发送一次检测数据 / 100/ 实例 100:电机转速表设计/ 包含单片机寄存器的头文件/ 包含_nop_() 函数定义的头文件/ 寄存器选择位,将 RS位定义为引脚/ 读写选择位,将 RW位定义为引脚/ 使能信号位,将 E 位定义为引脚/ 忙碌标志位,将 BF位定义为引脚 定义字符数组显示数字#include<> #include<> sbitRS=P20; sbitRW=P21; sbitE=P22; sbitBF=P07;unsignedcharcodedigit

38、="09"/ unsignedintv; / 储存电机转速 unsignedcharcount; / 储存定时器 T0 中断次数 bitflag; / 计满 1 秒钟标志位 /* 函数功能:延时 1ms(3j+2)*i=(3 ×33+2)×10=1010(微秒),可以认为是 1 毫秒 */ voiddelay1ms()unsignedchari,j;for(i=0;i<10;i+)for(j=0;j<33;j+)/* 函数功能:延时若干毫秒入口参数: n*/voiddelay(unsignedcharn)unsignedchari;for(i

39、=0;i<n;i+) delay1ms();/* 函数功能:判断液晶模块的忙碌状态 返回值: result 。result=1 ,忙碌 ;result=0 ,不忙 */ unsignedcharBusyTest(void)bitresult;RS=0;/ 根据规定, RS为低电平, RW为高电平时,可以读状态RW=1;E=1;/E=1 ,才允许读写_nop_(); / 空操作_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间 result=BF / 将忙碌标志电平赋给 result;/ 将 E 恢复低电平E=0; returnresult;/* 函数

40、功能:将模式设置指令或显示地址写入液晶模块 入口参数: dictate voidWriteInstruction(unsignedchardictate)while(BusyTest()=1);/ 如果忙就等待RS=0;/ 根据规定, RS和 R/W同时为低电平时,可以写入指令RW=0;E=0;/E 置低电平(根据表 8-6 ,写指令时, E为高脉冲,/ 就是让 E从 0到 1发生正跳变,所以应先置 "0" _nop_();_nop_(); / 空操作两个机器周期,给硬件反应时间 P0=dictate; / 将数据送入 P0口,即写入指令或地址 _nop_();_nop_(

41、);_nop_();_nop_();/ 空操作四个机器周期,给硬件反应时间E=1;/E 置高电平_nop_();_nop_();_nop_();_nop_();/ 空操作四个机器周期,给硬件反应时间E=0;/ 当 E 由高电平跳变成低电平时,液晶模块开始执行命令 /* 函数功能:指定字符显示的实际地址 入口参数: xvoidWriteAddress(unsignedcharx)WriteInstruction(x|0x80);/ 显示位置的确定方法规定为 "80H+地址码 x" /* 函数功能:将数据 (字符的标准 ASCII 码) 写入液晶模块 入口参数: y( 为字符常

42、量 )voidWriteData(unsignedchary) while(BusyTest()=1);RS=1;/RS 为高电平, RW为低电平时,可以写入数据RW=0;E=0; /E 置低电平(根据表 8-6 ,写指令时, E为高脉冲, / 就是让 E从0到 1发生正跳变,所以应先置 "0" P0=y; / 将数据送入 P0 口,即将数据写入液晶模块 _nop_();_nop_();_nop_();_nop_();/ 空操作四个机器周期,给硬件反应时间E=1;/E 置高电平_nop_();_nop_();_nop_();_nop_();/ 空操作四个机器周期,给硬件反应时间E=0;/ 当 E 由高电平跳变成低电平时,液晶模块开始执行命令/* 函数功能:对 LCD的显示模式进行初始化设置voidLcdInitiate(void)delay(15);应时间WriteInstruction(0x38); 接口delay(5);WriteInstruction(0x38);delay(5);WriteInstruction(0x38);/delay(5);Wr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论