修改了延时,已经可以了 |
wulin 发表于 2024-2-15 22:03 修改了延时,可以了,谢谢 #include<STC8h.h> #include <stdio.h> #include "intrins.h" #define uchar unsigned char #define uint unsigned int sbit E=P2^5; //1602使能引脚 sbit RW=P2^6; //1602读写引脚 sbit RS=P2^7; void Delay5ms() //@11.0592MHz { uchar data i, j; _nop_(); _nop_(); i = 72; j = 205; do { while (--j); } while (--i); } void Delay2ms() //@11.0592MHz { unsigned char data i, j; i = 29; j = 183; do { while (--j); } while (--i); } void Delay15ms() //@11.0592MHz { unsigned char data i, j; _nop_(); _nop_(); i = 216; j = 109; do { while (--j); } while (--i); } void writecmd(uchar com) { E=0; //为什么要写这一条呢,看看时序图就清楚了 RS=0; RW=0; P0 = com; Delay2ms(); //延时一下会稳定很多,后面一条也是一样的 E=1; Delay2ms(); E=0; } void writedata(uchar dat) { E=0; //为什么要写这一条呢,看看时序图就清楚了 RS=1; RW=0; P0 = dat; Delay2ms(); //延时一下会稳定很多,后面一条也是一样的 E=1; Delay2ms(); E=0; } void init(void) { Delay15ms(); writecmd(0x38); Delay5ms(); writecmd(0x38); Delay5ms(); writecmd(0x38); writecmd(0x38); writecmd(0x08); writecmd(0x01); writecmd(0x06); writecmd(0x0c); } uchar tab1[]=" www.51hei.com "; //要显示什么就在这儿改 void main() { uchar j; P_SW2 |= 0x80; //扩展寄存器XFR访问使能 P0M1 = 0x00; P0M0 = 0x00; //设置为准双向口 P1M1 = 0x00; P1M0 = 0x00; //设置为准双向口 P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口 P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口 P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口 P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口 P6M1 = 0x00; P6M0 = 0x00; //设置为准双向口 P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口 init(); writecmd(0x80); //告诉液晶在哪个地方显示 (设置地址指针)//80H+00 for(j=0;j<16;j++) //有16个字符,要循环16次 { writedata(tab1[j]); Delay5ms(); } while(1); } |
对比度调整不当 |
先调下第三脚V0的电压, 量下是多少, 调小,很可能就有惊喜: 字出来了. 如果没有惊喜, 要就要再调下初始化代码, 数据线连接是否正确,无虚焊. |
对比度调整不当或接线错(包括代码的线序、延时等错)![]() |
调一下V0接的电位器 |
你说代码是论坛上的,难道照抄都不会?可见粗心至极!
![]()
|