標(biāo)題:
用89C51單片機寫了一個LCD顯示兩個字符串的程序
[打印本頁]
作者:
wukouyyq
時間:
2022-5-9 19:41
標(biāo)題:
用89C51單片機寫了一個LCD顯示兩個字符串的程序
初學(xué)單片機,勿噴,請大俠指正,
20220509194027.jpg
(129.39 KB, 下載次數(shù): 65)
下載附件
仿真圖片
2022-5-9 19:41 上傳
程序如下 ,有需要的直接復(fù)制拷備
main.c 如下:
#include <reg52.h>
#include "1602.h"
typedef unsigned char u8;
u8 code word1[]={"1234567890ABCDEF"};
u8 code word2[]={"www.torrancerestoration.com"};
void main()
{
LCD_init();
w_string(0x80,word1);
w_string(0xc0,word2);
while(1);
}
/****************************************************************/
//1602.h 文件如下:
#ifndef _1602_H_
#define _1602_H_
/*
1602液晶屏的操作
讀數(shù)據(jù),寫數(shù)據(jù),寫命令
定義引腳:P0口是數(shù)據(jù),P2口是控制
*/
sbit RS=P2^0; //定義屏的模式管腳位
sbit RW=P2^1; //定義屏的讀寫管腳位
sbit EN=P2^2; //屏的使能位
sbit BUSY=P0^7;
void wait() //實際是判斷LCD是否忙,是否可進入讀寫狀態(tài)
{
P0=0xff;
do
{
RS=0; //命令(狀態(tài))模式
RW=1; //讀操作
EN=0; //使能關(guān)
EN=1; //使能開
}while(BUSY==1);
EN=0;
}
void w_dat(unsigned char dat) //寫數(shù)據(jù)
{
wait();
EN=0;
P0=dat;
RS=1; //數(shù)據(jù)模式
RW=0; //寫操作
EN=1; //使能開,數(shù)據(jù)進去了
EN=0; //使能關(guān)
}
void w_cmd(unsigned char cmd) //寫命令函數(shù)
{
wait();
EN=0;
P0=cmd;
RS=0; //命令(狀態(tài))模式
RW=0; //寫操作
EN=1; //使能開,命令進去了
EN=0; //使能關(guān)
}
void w_string(unsigned char addr,unsigned char *p) //寫入字符串函數(shù)
{
w_cmd(addr); //寫入命令,讓屏從那里開始顯示
while(*p !='\0') //循環(huán)字符串中的每個字符,直到結(jié)尾
{
w_dat(*p++);
}
}
void LCD_init() //LCD初始化函數(shù)
{
w_cmd(0x38); //16*2顯示,5*7點陣,8位數(shù)據(jù)接口
w_cmd(0x0c); //顯示器開、光標(biāo)開、光標(biāo)允許閃爍
w_cmd(0x06); //文字不動、光標(biāo)自動右移
w_cmd(0x01); //清屏
}
#endif
作者:
hy47566398
時間:
2022-5-10 16:52
E口跳變少了延時,仿真可以,上機不行
作者:
wukouyyq
時間:
2022-5-13 20:50
謝謝樓上,今天發(fā)現(xiàn)這個問題了。
我把程序下載到實物中(剛買的1602屏,以前沒有),結(jié)果還是不顯示,不知如何是好,就從某一個寶找到測試程序,從程序中分析,看到語句中有 兩行一樣的,所以我把程序改了一下:
所有EN=1;前面加兩行EN=0; 這樣下載后OK。
希望看到此帖的所有人能學(xué)有所成!。。!
作者:
zmh010
時間:
2022-5-18 11:38
樓主,在此程序上。若想實現(xiàn),按鍵切換屏幕。要怎么做呢
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1