?? 12864并行接口參考程序.txt
字號:
//12864并行接口參考程序,控制器st7920
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//12864 漢字顯示模塊 與MCU連接
sbit RS = P2^2;// 1:輸入數據 ;0:輸入命令
sbit RW = P2^3;//1:讀數據 0:寫數據
sbit E = P2^7;
sbit PSB = P2^5; //串并口選擇 1:并口模式; 0:串口模式;
#define LcdData P0
//延時子程序
void delay(unsigned int t)
{ unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++);
}
//測試LCD忙
bit Check_Busy()
{
bit busy;
RS = 0;
RW = 1;
E = 1;
_nop_();
busy = (bit)(LcdData&0x80);
E = 0;
return busy;
}
//等待LCD到空閑
void wait()
{
while(Check_Busy());
}
//寫數據
void Lcd_Writedata(unsigned char dispdata)
{ wait();
RS=1;
RW=0;
E=0;
_nop_(); _nop_();
LcdData=dispdata;
E=1;
_nop_(); _nop_();
E=0;
}
//寫指令代碼
void Lcd_WriteCmd(unsigned char cmdcode)
{ wait();
RS=0;
RW=0;
E=0;
_nop_(); _nop_();
LcdData=cmdcode;
_nop_(); _nop_();
E=1;
_nop_(); _nop_();
E=0;
}
//初始化LCD
void Lcd_Reset()
{ PSB=1;
Lcd_WriteCmd(0x30); //選擇基本指令集
delay(5);
Lcd_WriteCmd(0x0c); //開顯示(無游標、不反白)
delay(5);
Lcd_WriteCmd(0x01); //清除顯示,并且設定地址指針為00H
delay(5);
Lcd_WriteCmd(0x06); //指定在資料的讀取及寫入時,設定游標的移動方向及指定顯示的移位
}
void WriteStr(unsigned char code *s)
{
while(*s>0)
{ Lcd_Writedata(*s);
s++;
}
}
void hzDisp()
{
Lcd_WriteCmd(0x80);
WriteStr("黃河遠上白云間,");
Lcd_WriteCmd(0x90);
WriteStr("一片孤城萬仞山。");
Lcd_WriteCmd(0x88);
WriteStr("羌笛何須怨楊柳?");
Lcd_WriteCmd(0x98);
WriteStr("春風不度玉門關。");
}
/*繪圖顯示的步驟
1 關閉繪圖顯示功能
2 先將垂直的坐標(Y)寫入繪圖RAM地址
3 再將水平的位元組坐標(X)寫入繪圖RAM地址
4 將D15-D8寫入RAM中
5 將D7-D0寫入到RAM中
6 打開繪圖顯示功能*/
//整屏顯示豎條
//當ii=0時顯示上面128×32,當ii=8時顯示下面128×32
void LcdFill_Vertical()
{ unsigned char x,y,ii;
for(ii=0;ii<9;ii+=8)
for(y=0;y<0x20;y++)
for(x=0;x<8;x++)
{
Lcd_WriteCmd(0x36);//擴充指令 繪圖顯示
Lcd_WriteCmd(y+0x80); //行地址
Lcd_WriteCmd(x+0x80+ii); //列地址
Lcd_Writedata(0x55); //寫數據 D15-D8
Lcd_Writedata(0x55); //寫數據 D7-D0
Lcd_WriteCmd(0x30);
}
}
//當ii=0時顯示上面128×32,當ii=8時顯示下面128×32
//整屏顯示橫條線
void LcdFill_Level()
{ unsigned char x,y,ii;
unsigned char k;
for(ii=0;ii<9;ii+=8)
for(y=0;y<0x20;y++)
{ if((y%2)==1)
k=0xff;
else
k=0;
for(x=0;x<8;x++)
{ Lcd_WriteCmd(0x36); //擴充指令 繪圖顯示
Lcd_WriteCmd(y+0x80); //行地址
Lcd_WriteCmd(x+0x80+ii); //列地址
Lcd_Writedata(k);
Lcd_Writedata(k);
Lcd_WriteCmd(0x30);
}
}
}
void Main()
{
Lcd_Reset(); //初始化LCD屏
while(1)
{
Lcd_Reset();
LcdFill_Vertical(); //顯示豎條
delay(6000);delay(4000);delay(4000);
Lcd_Reset();
LcdFill_Level(); //顯示橫條
delay(6000);delay(4000);delay(4000);
Lcd_Reset();
hzDisp(); //顯示漢字
delay(6000); delay(4000);delay(4000);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -