为什么把程序烧进去后LCD1602显示一排黑色方块
{unsigned char temp=0x80;第15引脚是背光源正极,一般需要外接10欧的电阻。
lcd1602程序 lcd1602程序流程图描述
lcd1602程序 lcd1602程序流程图描述
if((scan1&0xf0)!=0xf0) //判键是否按下
第3引脚是液晶显示偏压信号,一般需要外接个10K的电位器,调节显示对比度。
}void lcd_init(void)希望我的回答能够有所帮助。
我单片机上电后还没下程序,但是lcd1602却只能显示一行方框
LCD_RW = 0;这个是正常的现象,因为板内接线的原因,你没有控制的情况下,如果那部分电路有别的地方用到,高低电平就会使有效的部分的类亮,在你初始化后,即控制下它就不会那样了,把程序下进去看一下,单步/跟一下哪里次灭了就是哪里/就是初始化了。
单片机LCD1602液晶程序问题,仿真没问题,实物不显示
{timer_init();有时候是这样的,实物是要考虑外界干扰的,而仿真没有什么干扰,是理想情况,再继续调试,看好你的
比如你要行的前四个位子写1111。空无一物?P0=com;1602里就是没程序,也应该在行出现16个5X8点阵黑块。
lcd1602怎么反复写数据,就是怎么次显示一堆数据后,第二次又显示其他的内容,中间需要什么程序?
leden=0;不知道你的程序编的怎么样了。
write_com(0x80+0x00);你会控制寄存器了吗?
就是当rs引脚为低电平的时候输入数据。
首先,这个你知道了吗?
当rs引脚为低电平的时候,数据口输入
0x10 字符不动,光标左移一个位置
0x14字符不动,光标右移一个位置
0x18字符和光标一起左移一个位置
0x1c字符和光标一起右移一个位置
如果在这种情况下,输入0x80,就代表接下来要在行的个位子写字符。
0x81就代表接下来要在行的第二个位子写字符。
0xc0就代表接下来要在第二行的个位子写字符。
0xc1就/ /代表接下来要在第二行的第二个位子写字符。
以此推类。
那么你又要把它改成2222,你就控制寄存器,写一个0x80,就代表你接下来要在行的个位子写字符。这样2就会把原来的1代替,字符就被改掉了。
知道了吗?
51单片机里面用定时器实现倒计时,在LCD1602上显示倒计时,写完程序发现时间不能实现时间自减,求大神
}void write_date(uchar date)void main()
{delayms(15); //等待电源稳定write_init();
#define uint unsigned int{delay_ms(10);
write_date (Disp_Tab[a/600]);
write_date (Disp_Tab[a%600/60]);
write_date (Disp_Tab[10]);
write_date (Disp_Tab[a/10]);
}}
关于LCD1602程序的问题。求教。。为什么老是提示 error C141: syntax error near },还有重复定义等问题
/ /你这个程序写的乱七八糟的。最起码write_com(0x08,1);要包含reg52.h,要不所有51单片机的寄存器都不能用。还有sfr是定义特殊寄存器的,你用sfr定义了一个DBPort给定了输出值,可是之后看你DBPort的用法又是当输入用的。另外,sfr DBPort = 0x80;这句之后又莫名其妙出来一对大括号,也没有函数名(估计应该是判忙函数)。
result = (bit)(LCD_DB_Port&0x80);用lcd1602显示,显示程序没错,接线没错,就是显示不出来,求高人指点原因,369521148,这是我的qq,
/ /1.可能是显示屏已经损坏,建议拿一个确保好的1602进行测试。
while(1)2.程序可能还存在错误,建议进行单步查找,查看每一步的结果是不是与自己所想一致,这样{for(j=0;j<125;j++) ;才能确保程序真的没错。
3.检查接线,用万用表逐一检查导线,查看导线是否导通。接着再细致对照电路图进行接线检查,建议从一个出发一个部分一个部分的进行连接(或检查),进行整体的检查。
4.检查与1602连接的其他器件是否完好,如和单片机连接,查看单片机是否良好。
5.确保屏是好的前提下,如果全不亮,看一下15 16引脚的解法是否正确,它们主管显示屏的亮度 再看3它管对比度。
建议你先用protues仿真试试吧!!!如果还是没显示的话就是你的程度有问题
51单片机中怎么用按键控制lcd1602的光标移动,即每按一次按键光标向右移动一位?写出具体的程序
for(j=0;j<10; j++);你可以定义一个函数
/光标移动是LCD指令,/光标移动是LCD指令...你可以定义一个函数...
自己摸索..这样才能学的快..
51单片机温度传感器ds18b20、lcd1602液晶C程序
{write_date(table[num]);LCD1602驱动程序void delayms(uchar x)
{ uchar j;
while((x--)!=0)
}}
//
/ /
/检查LCD忙状态 /
/lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据 /
/ /
//
static bit lcd_busy()
{bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
dwrite_date (Disp_Tab[a%10]);elayNOP();
LCD_EN = 0;
return(result);
}//
/写指令数据到LCD /
/RS=L,RW=L,E=高脉冲,D0-D7=指令码。 /
void lcd_wcmd(uchar cmd)
{while(lcd_busy());
LCD_RS = 0;
LCD_EN = 0;
_nop_();
_nop_();
LCD_DB_Port = cmd;
delayNOP();
LCD_EN = 1; //上跳沿时输入数据
delayNOP();
LCD_EN = 0;
}//
/写显示数据到LCD /
/RS=H,RW=L,E=高脉冲,D0-D7=数据。 /
void lcd_wdat(uchar dat)
{while(lcd_busy());
LCD_RS = 1;
LCD_EN = 0;
LCD_DB_Port = dat;
delayNOP();
LCD_EN = 1;
delayNOP(); //上跳沿时输入数据
LCD_EN = 0;
}//
/ /
/ LCD初始化设定 /
/ /
//
void lcd_init()
lcd_wcmd(LCD_MODE); //设置显示模式
lcd_wcmd(LCD_MODE);
lcd_wcmd(LCD_MODE);
lcd_delayms(5);wcmd(0x0c); //显示开,关光标
lcd_wcmd(0x06); //移动光标
lcd_wcmd(0x01); //清除LCD的显示内容
}//
/ /
/ 设定显示位置 /
/ /
//
void lcd_PrPos(uchar row,uchar col)
{if(row == 0)
lcd_wcmd(col | 0x80); //数据指针=80+地址变量
if(row == 1)
lcd_wcmd(col | 0x80 | 0x40);
}
说明一下,这里的18B20加数码管的温度仿真,要是1602需要改一下
#include"reg52.h"
#define uchar unsigned char
it leden=P3^4;
it ledrs=P3^5;
it ledrw=P3^6;
it dual=P2^6;
it weal=P2^7;
uchar table[]="I Love You!";
uchar table1[]="Beli Me!";
void delay(uchar z)
{uchar i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}void write_com(uchar com)
{ledrs=0;
delay(5);
leden=1;
delay(5);
{ledrs=1;
P0=date;
delay(5);
leden=1;
delay(5);
}void init()
{ledrw=0;
dual=0;
weal=0;
write_com(0x38); // 初始化显示模式
write_com(0x0f); // 开显示,显示光标并闪烁
write_com(0x06); // 光标自动移位
write_com(0x01); // 显示清屏
}void main()
{ uint num=0;
init();
for(num=0;num<11;num++)
delay(200);
}write_com(0x80+0x40);
for(num=0;num<11;num++)
{write_date(table1[num]);
delay(200);
}while(1);
}
求单片机实现4×4键盘输入,并用LCD1602显示键盘输入的数字的程序,
{delay(30); //延时30ms#include
#include
#define uchar unsigned char
#define DD P0
it Rs=P0^0;
it Rw=P0^1;
uchar key_led;
unsigned char code disp_code[]={"0123456789abcdef"};
unsigned char code key_code[]={
0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,it E=P0^2;0xd7,0xb7,0x77 };//注意这里你自己看下你电路是怎么连得,对应改一下表单里的值
/
/ 延时子程序
/
/
void delay(int ms)
{int i;
while(ms--)
{for(i = 0; i< ; i++)
{_nop_();
_nop_();
_nop_();
_nop_();
}}
}void delay_1ms(unsigned char i) //最小延时1ms
{ unsigned char j;
while(i--)
for(j=0;j<125; j++);
}void delay_10ns(unsigned char i) //最小延时10ns
{unsigned char j;
while(i--)
}void write_com(unsigned char com,bit p) //写指令
{if(p)
delay_10ns(5);
E=0;
Rs=0;
Rw=0;
DD=com;
delay_10ns(50); //>40ns
E=1;
delay_1ms(2); //>150ns
E=0;
delay_10ns(4); //>25+10ns
}void write_date(unsigned char DATA) //写数据
{delay_10ns(50);
E=0;
Rs=1;
Rw=0;
DD=DATA;
delay_10ns(50);
E=1;
delay_10ns(50);
E=0;
delay_10ns(4);
}void addr_x_y(unsigned char x,bit y) //写坐标,定位置
if(y)
{temp|=0x40;
}temp|=x;
write_com(temp,0);
}void desplay_char(unsigned char x,bit y,unsigned char p)
//在指定位置显示一个字符。
{addr_x_y(x,y);
write_date(p);
{delay_1ms(15);
write_com(0x38,0);
delay_1ms(5);
write_com(0x38,0);
delay_1ms(5);
write_com(0x38,0);
delay_1ms(5);
write_com(0x38,1);
write_com(0x01,1);
write_com(0x06,1);
write_com(0x0c,1);
}/
键盘扫描子函数
uchar keyscan()
{uchar scan1,scan2,keycode,j;
P1=0xf0;
scan1=P1;
scan1=P1;
if((scan1&0xf0)!=0xf0) //二次判键是否按下
{P1=0x0f;
scan2=P1;
keycode=scan1|scan2; //组合成键编码
for(j=0;j<=15;j++)
{if(keycode== key_code[j]) //查表得键值
{delay(30);
key_led=j;
}}
}}
else return(16) ;
}/
判键是否按下子函数
void keydown()
{P1=0xf0;
if((P1&0xf0)!=0xf0)
{keyscan();
}}
/
/ 主程序
/
/
void main(void)
{lcd_init(); // 初始化LCD
key_led=16;
{keydown();
desplay_char(0,0,disp_code[key_led]);
}}