為什麼這篇8051 lcd c語言鄉民發文收入到精華區:因為在8051 lcd c語言這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者fmdjyl (小D(滴))看板Electronics標題Re: [問題] 8051使用C語言L...
來自書本範例~ 書名:單晶片MCS-51與C語言入門實習
此程式有做過實驗~可以正常動作!
//************** LCD1.C **********************************
//動作:由LCD顯示兩行文字,令其閃爍或移位
// P35=RS , P36=R/W ,P37=EN ,P1=DATA_BUS
//**********************************************************
#include <AT89X51.h>
char code Table1[] = "12345678901234567890"; //第一行列表字元
char code Table2[] = "ABCDEFGHIJKLMNOPQRST"; //第二行列表字元
sbit RS=0xb5; //P35=RS=0指令暫存器,RS=1資料暫存器
sbit RW=0xb6; //P36=RW=1讀取,RW=0寫入
sbit EN=0xb7; //P37=EN=0禁能LCD,EN=1致能LCD
sfr DATA_BUS=0x90; //DATA bus=P1
void Reset_LCD(void);
void Delay(unsigned int dly);
void LCD_Cmd(unsigned char comm);
void Send_Data(char Data);
void main(void)
{
int i;
P1=0;
Reset_LCD(); //重置及清除LCD
LCD_Cmd(0x80); //游標由第一行開始顯示
for(i=0 ; i< 20 ; i++)
Send_Data(Table1[i]); //讀取列表20字送到LCD顯示
LCD_Cmd(0xC0); //游標由第二行開始顯示
for(i=0 ; i< 20 ; i++)
Send_Data(Table2[i]); //讀取列表20字送到LCD顯示
loop:
LCD_Cmd(0x08); Delay(60000); //D=0關閉顯示器
LCD_Cmd(0x0c); Delay(60000); //D=1開啟顯示器
//LCD_Cmd(0x1c); Delay(60000); //SC=1及RL=1顯示幕右移? //LCD_Cmd(0x18); Delay(60000); //SC=1及RL=0顯示幕左移
goto loop;
}
void Reset_LCD(void) //LCD的啟始程式
{
LCD_Cmd(0x38); //DL=1:8bit傳輸,N=1:顯示2行,F=0:5*7字型
LCD_Cmd(0x0c); //D=1:顯示幕ON,C=0:不顯示游標,B=0:游標不閃爍
LCD_Cmd(0x06); //I/D=1:顯示完游標右移,S=0:游標移位禁能
LCD_Cmd(0x01); //清除顯示幕
LCD_Cmd(0x02); //游標回原位
}
void Send_Data(char Data) //傳送資料到LCD
{
DATA_BUS=Data; //資料送到BUS
RS=1;RW=0;EN=1; //資料到LCD內
Delay(60);
EN=0; //禁能LCD
}
void LCD_Cmd(unsigned char comm) //傳送命令到LCD
{
DATA_BUS=comm; //命令送到BUS
RS=0;RW=0;EN=1; //命令到LCD內
Delay(60);
EN=0; //禁能LCD
}
void Delay(unsigned int dly) //延時函數
{
while(dly > 0)
dly --;
}
--------------------------------------------------------------------
※ 引述《submarines ()》之銘言:
: 最近才剛開始學51…
: 寫到LCD時照著範例打只能顯示一行而已
: 我需要顯示兩行
: 但程式怎麼改就是無法呼叫第二行
: 以下附的是顯示一行的程式…
: 希望在這裡的高手能幫我解決一下…thanks
: #include "AT89X51.H"
: #define RS P2_0
: #define RW P2_1
: #define Enable P2_2
: char one=0;
: char zero=0;
: void DELAY(int zzz)
: {
: int d;
: for(d=zzz;d>0;d--);
: }
: void CheckBusy(void)
: {
: char i=0x80;
: while(i&0x80)
: {
: RS=0;
: RW=1;
: Enable=1;
: i=P3;
: Enable=0;
: DELAY(250);
: }
: }
: void WriteData(char i)
: {
: RS=1;
: RW=0;
: Enable=1;
: P3=i;
: Enable=0;
: CheckBusy();
: }
: void WriteString(count,MSG)
: char count;
: char MSG[];
: {
: char i;
: for(i=0;i<count;i++)
: WriteData(MSG[i]);
: }
: void WriteIns(char instruction)
: {
: RS=0;
: RW=0;
: Enable=1;
: P3=instruction;
: Enable=0;
: CheckBusy();
: }
: void InitialLCD(void)
: {
: WriteIns(0x38);
: WriteIns(0x08);
: WriteIns(0x01);
: WriteIns(0x0e);
: WriteIns(0x06);
: }
: void main()
: {
: char MSG0[]="FIRLAB";
: InitialLCD();
: WriteString(6,MSG0);
: while(1);
: }
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.117.4