1602显示液晶问题
时间:10-02
整理:3721RD
点击:
- #include"1602.h"
- //LCD延时函数
- void LCD_delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- //使能函数
- void LCD_en()
- {
- LCD_EN=1;
- LCD_delay(5);
- LCD_EN=0;
- }
- //指令函数
- void LCD_cmd(uchar cmd)
- {
- LCD_WR=0;
- LCD_RD=0;
- LCD_DATA=cmd;
- // LCD_delay(5);
- LCD_en();
- }
- //数据函数
- void LCD_dat(uchar dat)
- {
- LCD_WR=0;
- LCD_RD=1;
- LCD_DATA=dat;
- // LCD_delay(5);
- LCD_en();
- }
- //标识位检查 忙返回0,不忙返回1;
- bit LCD_bf()
- {
- bit result;
- LCD_WR=1;
- LCD_RD=0;
- LCD_EN=1;
- //LCD_delay(5);
- result=LCD_BF;
- LCD_EN=0;
- return result;
- }
- //读数函数
- uchar LCD_rd()
- {
- uchar LCD_RD_DATA;
- LCD_RD=1;
- LCD_WR=1;
- LCD_EN=1;
- LCD_delay(5);
- LCD_RD_DATA=LCD_DATA;
- LCD_EN=0;
- return(LCD_RD_DATA);
- }
- /***************************8
- 输入方式 0x50指针+不移位
- 显示开关 0x0c开显示
- 光标移位 不设置
- 功能设置 0x38
- ****************************/
- void LCD_init()
- {
-
- while(1==LCD_bf());
- LCD_cmd(0x01); //清屏
- while(1==LCD_bf());
- LCD_cmd(0x0c);
- while(1==LCD_bf());
- LCD_cmd(0x38);
- while(1==LCD_bf());
- LCD_cmd(0x06);
- }
- //位置函数
- void LCD_pos(uchar x,uchar y)
- {
- if(y==0)
- {LCD_cmd(0x80|x);}
- else
- {LCD_cmd(0xc0|x);}
- }
- //整数转化为字符串函数
- void LCD_zh(int a,int b,int c)
- {
- sprintf(LCD_md,"%d:%d:%d",a,b,c);
- }
- //写字符串函数
- void LCD_wd_c(uchar x,uchar y,int a,int b,int c,char *md)
- {
- LCD_init();
- LCD_pos(x,y);
-
- LCD_zh( a, b, c);
- while((* md)!='\0')
- {
- while(LCD_bf());
-
- LCD_dat( * md);
- ++md;
-
- }
- }
- //自定义字符 , add在 0x40——0x7f中 8个字符
- void LCD_set(uchar add,uchar num[7])
- {
- uchar a;
- while(1==LCD_bf());
- LCD_cmd(add*8+0x40);
- for(a=0;a<8;a++)
- {
-
- while(1==LCD_bf());
- LCD_dat(num[a]);
- }
- }
- void main()
- {
-
- /* uchar tab[]={0x00,0x1B,0x15,0x11,0x0A,0x04,0x00,0x00};
- LCD_delay(1000);
- LCD_init();
- while(1==LCD_bf());
- LCD_set(0,tab);
- while(1==LCD_bf());
- LCD_pos(1,1);
- while(1==LCD_bf());
- LCD_dat(0x01);
- while(1==LCD_bf()); */
- LCD_wd_c(1,0,2,2,2,LCD_md);
- while(1);
- }
显示时
LCD_wd_c(1,0,2,2,2,LCD_md);
是在第一行第2个位置显示 2:2:2
但是老是出错,可能在第一行第6个位置显示 6>6>6
就是每个都加了4(比如1+4; 2+4; :+4=> )
但有时又会在第一行第1个位置或第一行第6个位置 显示
2:2:6或2>6>6或2:2:2
反正就是在这2个位置显示2,6,:,>这些的组合