這個是用C寫的LCD1602顯示代碼,通過AT89c52單片機驅動。經過本人檢測,用proteus仿真和實物都可以顯示。需要三個代碼編譯成.hex文件再放入芯片中。- //1.
- //filename:glocal.h
- #define uchar unsigned char
- #define uint unsigned int
- //2.
- //filename:ks0066.H
- #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.
- #include<reg51.h>
- #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);
- }
復制代碼
|