首页 > 编程知识 正文

51单片机lcd1602显示数字(51单片机LCD1602程序)

时间:2023-05-06 00:01:32 阅读:122651 作者:274

学习了LCD1602工艺入门程序,并通过了proteus8.3的验证

/* main.cfilegeneratedbynewprojectwizard * * created :星期三6月28日2017 * processor : at 89 c 52 * compiler : keil for 8051 * typedef unsigned int uint; sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; sbit BTN=P3^3; //判断液晶忙,忙的话就等。 1602也是CPU,所以处理原始命令。 如果不判断则数据混乱的void Read_Busy ()//读写检查函数) { uchar busy; P0=0xff; //P0端口为数据侧RS=0的RW=1; //读取状态的操作时间为RS=L、RW=H、E=H、D0~D7输出状态字do { EN=1; busy=P0; EN=0; }while(busy0x80 ); //状态字是busy(8位二进制)的最高有效位,//为1表示禁止读写,0表示允许读写,其状态由busy0x80的结果表示) voidwrite_cmd(ucharcmd ) /写入命令//每次对控制器进行读写操作时判断是否忙。 即进行读写检测RS=0; RW=0; P0=cmd;//写入十六进制格式的指令(command ) EN=1; //写入指令的操作时间: RS=0、RW=0、EN=高脉冲EN=0; //获得高脉冲后,将使能侧复位为零(voidwrite_dat(uchardat )//写入数据) { Read_Busy ); //写入数据前进行读写检查RS=1; RW=0; P0=dat; //P0端口写入数据EN=1; //写入数据操作时间: RS=0、RW=0、EN=高脉冲EN=0; //得到高脉冲后将使能侧复位为零(}void LCD1602_Init ) (write_cmd )0x38 ); 设置16*2显示write_cmd(0x0f )//打开显示光标,使write_cmd(0x01 )闪烁; //清晰屏幕write_cmd(0x06 ); //地址指针移位命令write_cmd(0x80|0x00 ); //显示地址0x80是第一行的起始地址。0x80|0x06表示数据从第一行的第七个字符的位置开始显示。 (语音打印str ) char*str ) { char i,len; len=strlen(str; //获取字符串长度for (I=0; ilen; I ) {write_dat(*str ); str; }}void main () { char *str='hello123 '; LCD1602_Init (;//初始化//LCD1602write_dat(h )的write_dat(e ); write_dat(L ); write_dat(L ); write_dat(o ); Write_Dat (' ); Write_Dat (' ); Write_Dat (' ); write_dat(2); write_cmd(0x80|0x40|0x01 ); 显示//第二行显示//地址,0x80|0x40表示第二行,0x40是第二行的起始地址。 也可以写为0x800x40或0xc0。 //0xc0|0x0c表示数据从第一行的第13个字符的位置开始到第1602行只显示16个字符,因此从第13个字符的位置开始显示时只能显示4位打印str (str )。 wile(1; }实验结果如下。

文章: http://blog.csdn.net/u 013151320/article/details/46663167

2017/6/28修正

修正main函数显示液晶屏的第二行程序,以前的初始化错误

添加printstr(char*str )函数并输出字符串

使用strlen函数时,请记住头文件中必须包含“string.h”

语音打印str (char * str ) { char i,len; len=strlen(str; //获取字符串长度for (I=0; ilen; I ) write_dat(*str ); str; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。