请问为什么仿真的时候 LCD1602的 3个寄存器端口 电平一直是灰色?
单片机源程序如下:
- #include "reg51.h"
- #include "stdio.h"
- #define uchar unsigned char
- #define uint unsigned int
-
- #define D P0
- sbit E=P2^7;
- sbit RS=P2^6;
- sbit RW=P2^5;
- void delay_ms(uchar xms);
- void LcdWriteCom(uchar com);
- void LcdWriteData(uchar dat);
- void LcdInit();
- void Show_string1(uchar a[]);
- void Show_string2(uchar a[]);
- void show_string(uchar add,uchar a[]);
- void show_number(uchar add,uint a);
- void show_float(uchar add,float a);
- void main()
- {
- LcdInit();
- Show_string1("LCD1602test");
- while(1);
- }
- void delay_ms(uchar xms)
- {
- uchar i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void LcdWriteCom(uchar com)
- {
- E=0;
- RW=0;
- RS=0;
- D=com;
- delay_ms(5);
- E=1;
- delay_ms(5);
- E=0;
- }
- void LcdWriteData(uchar dat)
- {
- E=0;
- RW=0;
- RS=1;
- D=dat;
- delay_ms(5);
- E=1;
- delay_ms(5);
- E=0;
- }
- void LcdInit()//³õʼ»¯
- {
- LcdWriteCom(0x38);
- LcdWriteCom(0x0c);
- LcdWriteCom(0x06);
- LcdWriteCom(0x01);
- LcdWriteCom(0x80);
- }
- void show_string(uchar add,uchar a[])
- {
- uchar i;
- LcdWriteCom(0x80+add);
- for(i=0;a[i]!='\0';i++)
- {
- LcdWriteData(a[i]);
- }
- }
- void Show_string1(uchar a[])
- {
- uchar i;
- LcdWriteCom(0x80);
- for(i=0;a[i]!='\0';i++)
- {
- LcdWriteData(a[i]);
- }
- }
- void Show_string2(uchar a[])
- {
- uchar i;
- LcdWriteCom(0x80+0X40);
- for(i=0;a[i]!='\0';i++)
- {
- LcdWriteData(a[i]);
- }
- }
- void show_number(uchar add,uint a)
- {
- char s[10];
- sprintf(s,"%d",a);
- show_string(add,(uchar *)s);
- }
- void show_float(uchar add,float a)
- {
- char s[10];
- sprintf(s,"% .1f",a);
- show_string(add,(uchar *)s);
- }
复制代码
|