Proteus AT89C51+LCD1602 仿真及烧制运行

1.Protues 中LCD1602对应的模块为LM016L,

  其控制芯片一般为HD447780,但也有些是KS0066,KS0066可与HD44780兼容.

 另注意点是V0和Vss间要接一个1K的电阻,有些须通过接10k的电位器进行调整。

 

2.1602引脚

3.proteus仿真图

  

 

 

4:代码

 

1. //filename:glocal.h //latest revise:2010-07-01 //by:alex shoal //email:[email protected] #define uchar unsigned char #define uint unsigned int 2. //filename:ks0066.H //latest revise:2010-07-01 //by:alex shoal //email:[email protected] #define DATA_PORT P1 //------------------------------------------- // 管脚定义 //------------------------------------------ sbit RS=P2^0; //数据(L)/命令(H)选择 sbit LCDRW=P2^1; //写,低电平有效 sbit EN=P2^2; //使能,低电平有效 //=========================================== // 函数声明 //------------------------------------------- void delay_lcd(char); void write_data(char); void write_com(char); void lcd_init(); void delay_ms(char); void print_string(char*); //-------------------------------------------- // 写数据函数 //-------------------------------------------- void write_data(char dat){ RS=1; //数据 LCDRW=0; //写 DATA_PORT=dat; //把数据送到P口 delay_ms(5); //当晶振较高时加延时 EN=1; delay_ms(5); //当晶振较高时加延时 EN=0; //关使能 } //-------------------------------------------- // 写命令函数 //-------------------------------------------- void write_com(char com){ RS=0; //命令 LCDRW=0; //写 DATA_PORT=com; delay_ms(5); //当晶振较高时加延时 EN=1; delay_ms(5); //当晶振较高时加延时 EN=0; } //-------------------------------------------- // 1602初始化函数 //-------------------------------------------- void lcd_init(){ LCDRW=0; RS=0; write_com(0x36); //set text home address write_com(0x0f); //display switch,display on,cursor on,blink on. write_com(0x38); write_com(0x06); //input set. write_com(0x01); //screen clear write_com(0x80); //DDRAM AD set to 00h, } void print_string(char* str){ int i; for(i=0;str[i]!=0;i++) { write_data(str[i]); } } //-------------------------------------------- // 延时函数 //-------------------------------------------- void delay_ms(uchar t){ int j; for(;t!=0; t--) for (j=0;j<255;j++); } 3. //latest revise:2010-07-01 //by:alex shoal //email:[email protected] #include #include"global.h" #include "ks0066.h" // for lcd 1602 main(){ lcd_init(); print_string("Hello World!"); write_com(0xc0); //DDRAM AD set to 00h, print_string("This is Alex!"); //write_com(0xc0); //DDRAM AD set to 00h, //print_string("XXX!"); while(1); }  

 

5.仿真结果

 

6。实际运行拍照。

 

7.电路其他部分。

你可能感兴趣的:(电子技术)