avr单片机lcd1602
AVR单片机显示LCD字符,我这LCD1602感觉没问题了。可是为什么就是无法显示呢,求大神帮忙。程序如下:#include<mega16.h>#include<dela...
AVR单片机显示LCD字符,我这LCD1602感觉没问题了。可是为什么就是无法显示呢,求大神帮忙。
程序如下:
#include<mega16.h>#include<delay.h>#define EN PIND.7#define RS PIND.5#define RW PIND.6#define BF PINCC.7#define uchar unsigned char#define uint unsigned intuchar num[]="124122012015";uchar i; /***************** 忙检测函数*******************/uchar Busy() {bit flag;DDRC=0x00;RS=0; /*根据规定,RS为低电平,RW为高电平时,可以读状态*/RW=1;EN=1; /*E=1,才允许读写*/
delay_ms(1); flag=PORTC.7; PORTD.7=0;return flag;} /***************** 写命令函数*******************/void write_com(uchar com){ DDRC=0xff;while(Busy()==1); /*如果忙就等待*/RS=0; /*选择写命令模式*/ RW=0; /*选择写模式*/delay_ms(1); PORTC=com; /*将要写的命令送到数据总线上*/ delay_ms(1); EN=1; /*给使能端一个高脉冲*/ delay_ms(1); /*稍作延迟*/EN=0; /*给使能端置零,完成下降沿,是写命令完成*/} /***************** 写数据函数*******************/void write_data(uchar date){DDRC=0xff;RS=1; /*选择写数据模式*/ RW=0; /*选择写模式*/PORTC=date;/*将要写的数据送到数据总线上*/ delay_ms(5); EN=1; /*给使能端一个高脉冲*/ delay_ms(5); /*稍作延迟*/EN=0; /*给使能端置零,完成下降沿,使写命令完成*/}/* 初始化子函数*/void init(){
EN=0;write_com(0x38);/*设置16X2显示,5X7点阵,8位数据接口*/write_com(0x0c);/*设置开显示,不显示光标*/write_com(0x06);/*写一个字符后地址指针加1*/write_com(0x01);/*显示清零,数据指针清零*/}void main(){
init(); DDRD=0xff; write_com(0x80); for(i=0;i<12;i++) { write_data(num[i]); delay_ms(5); } while(1);} 请各位前辈帮忙下,感激不尽! 展开
程序如下:
#include<mega16.h>#include<delay.h>#define EN PIND.7#define RS PIND.5#define RW PIND.6#define BF PINCC.7#define uchar unsigned char#define uint unsigned intuchar num[]="124122012015";uchar i; /***************** 忙检测函数*******************/uchar Busy() {bit flag;DDRC=0x00;RS=0; /*根据规定,RS为低电平,RW为高电平时,可以读状态*/RW=1;EN=1; /*E=1,才允许读写*/
delay_ms(1); flag=PORTC.7; PORTD.7=0;return flag;} /***************** 写命令函数*******************/void write_com(uchar com){ DDRC=0xff;while(Busy()==1); /*如果忙就等待*/RS=0; /*选择写命令模式*/ RW=0; /*选择写模式*/delay_ms(1); PORTC=com; /*将要写的命令送到数据总线上*/ delay_ms(1); EN=1; /*给使能端一个高脉冲*/ delay_ms(1); /*稍作延迟*/EN=0; /*给使能端置零,完成下降沿,是写命令完成*/} /***************** 写数据函数*******************/void write_data(uchar date){DDRC=0xff;RS=1; /*选择写数据模式*/ RW=0; /*选择写模式*/PORTC=date;/*将要写的数据送到数据总线上*/ delay_ms(5); EN=1; /*给使能端一个高脉冲*/ delay_ms(5); /*稍作延迟*/EN=0; /*给使能端置零,完成下降沿,使写命令完成*/}/* 初始化子函数*/void init(){
EN=0;write_com(0x38);/*设置16X2显示,5X7点阵,8位数据接口*/write_com(0x0c);/*设置开显示,不显示光标*/write_com(0x06);/*写一个字符后地址指针加1*/write_com(0x01);/*显示清零,数据指针清零*/}void main(){
init(); DDRD=0xff; write_com(0x80); for(i=0;i<12;i++) { write_data(num[i]); delay_ms(5); } while(1);} 请各位前辈帮忙下,感激不尽! 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询