工具proteus,keil
步骤:
1.画好电路图
2.在指令模式下,设置好显示模式以及光标位置
3.在写数据模式下,向1602写入显示字符(1602只能显示数字和字符)
电路图
#include <REGX51.H> #define uchar unsigned char #define uint unsigned int void init(); void write_cmd(uchar cmd); void write_data(uchar input); void delay(uchar time_delay); uchar table_wel[] = "hello world!"; uchar table_name[] = "i am gxf!"; sbit lcdrs = P3^0; sbit lcdrw = P3^1; sbit lcden = P3^2; void main() { uchar i = 0; init(); //write_data('g'); for(;i < 12;i ++) { write_data(table_wel[i]); } write_cmd(0xc0); // delay(5); for(i = 0; i < 9; i++) { write_data(table_name[i]); } while(1); } void init() { lcdrs = 0;//命令选择段 lcdrw = 0;//写命令 write_cmd(0x38); write_cmd(0x0f); write_cmd(0x06); write_cmd(0x80);//从第一个位置开始显示 } void write_cmd(uchar cmd) { lcdrs = 0;//命令选择段 lcdrw = 0;//写命令 P2 = cmd;//设置显示模式 delay(5); lcden = 1; delay(5);//延时5MS形成高脉冲 lcden = 0; } void write_data(uchar input) { lcdrs = 1;//写数据模式 lcdrw = 0;//写数据 P2 = input;//设置显示模式 delay(5); lcden = 1; delay(5);//延时5MS形成高脉冲 lcden = 0; } //软件延时 void delay(uchar time_delay) { uint x,y; for(x = time_delay; x > 0; x --) for(y = 110; y > 0 ; y--); }
测试效果
说明:最开始我用的是P0口,控制rs,rw和en,但好像P0口要特殊一点。有点不行,换了P3口。还要研究一下P0口。