?? clcd.c
字號:
/*******************************************************
* 文件名: LCD.C
* 功能描述: 液晶控制實驗
* 顯示"唐都科教儀器公司歡迎您!", 滾屏一周
*******************************************************/
#include "SST89x5x4.h"
#include "lcd.h"
sbit RW = P1^0; //讀寫控制
sbit RS = P1^1; //數據, 命令切換
sbit CS2 = P1^2; //控制器2片選
sbit CS1 = P1^3; //控制器1片選
sbit E = P1^4; //使能信號
sbit LT = P1^5; //背景燈控制
void delay(char time);
void Query(char chip); //狀態查詢
void Clear(); //清屏
void writehz(char xadd,char yadd,char chip,char* hz);
char Wdata;
char xadd; //X地址
char yadd; //Y地址
void SendMCmd(unsigned char cmd) //向控制器1發送命令
{
Query(1); delay(1); //查詢忙狀態
RS = RW = CS1 = 0; //控制寫入命令
P0 = cmd;
E = 0; E = 1; E = 0; CS1 = 1;
}
void SendSCmd(unsigned char cmd) //向控制器2發送命令
{
Query(2); delay(1);
RS = RW = CS2 = 0;
P0 = cmd;
E = 0; E = 1; E = 0; CS2 = 1;
}
void SendMData(unsigned char dat) //向控制器1寫數據
{
Query(1); delay(1);
RS = 1; RW = 0; CS1 = 0;
P0 = dat;
E = 0; E=1; E=0; CS1 = 1;
}
void SendSData(unsigned char dat) //向控制器2寫數據
{
Query(2); delay(1);
RS = 1; RW = 0; CS2 = 0;
P0 = dat;
E=0; E=1; E=0; CS2 = 1;
}
void Query(char chip) //狀態查詢,chip指出控制器號
{ //chip=1為控制器1
unsigned char xdata statu, count = 100;
RS = 0; RW = 1;
if(chip == 1) CS1 = 0;
else CS2 = 0;
do
{
E = 1; statu = P0; E = 0;
if((statu&0x80)!=0x80) break;
}while(count--);
if(chip == 1) CS1 = 1;
else CS2 = 1;
}
void Clear() //清除顯示屏
{
unsigned char i, j;
for(i=0; i<8; i++)
{
xadd = 0xb8+i; yadd = 0x40;
SendMCmd(xadd); SendSCmd(xadd); //設置X,Y地址
SendMCmd(yadd); SendSCmd(yadd);
for(j=0; j<64; j++)
{
SendMData(0x00); SendSData(0x00); //為所以RAM寫00
}
}
}
void writehz(char xadd,char yadd,char chip,char* hz)
{ //寫漢字子程序 16*16
int x,y;
if(chip==0x01) //為控制器1
{
SendMCmd(xadd); SendMCmd(yadd);
for(x=0;x<2;x++) //寫入漢字字模
{
for(y=0;y<16;y++)
{
Wdata = hz[y+(x*16)];
SendMData(Wdata);
}
xadd++;
SendMCmd(xadd); SendMCmd(yadd);
}
}
else //為控制器2
{
SendSCmd(xadd); SendSCmd(yadd);
for(x=0;x<2;x++) //寫入漢字字模
{
for(y=0;y<16;y++)
{
Wdata = hz[y+(x*16)];
SendSData(Wdata);
}
xadd++;
SendSCmd(xadd); SendSCmd(yadd);
}
}
}
void main(void)
{
unsigned char x; unsigned int y;
LT = 0; //關閉背景燈
SendMCmd(0x3f); SendSCmd(0x3f); //打開顯示
SendMCmd(0xc0); SendSCmd(0xc0); //設置起始行
Clear();
writehz(0xba,0x40,1,tang); //顯示"唐"
writehz(0xba,0x50,1,du); //都
writehz(0xba,0x60,1,ke); //科
writehz(0xba,0x70,1,jiao); //教
writehz(0xba,0x40,2,yi); //儀
writehz(0xba,0x50,2,qi); //器
writehz(0xba,0x60,2,gong); //公
writehz(0xba,0x70,2,si); //司
writehz(0xbc,0x60,1,huan); //歡
writehz(0xbc,0x70,1,ying); //迎
writehz(0xbc,0x40,2,nin); //您
writehz(0xbc,0x50,2,gantan); //!
for(x=0xc1;x<0xFF;x++) //滾屏一周
{
SendMCmd(x); SendSCmd(x);
for(y=0; y<0x1000; y++) delay(0xff);
}
while(1);
}
void delay(char time)
{
char i;
char j;
for(i=0;i<=time;i++)
{
for(j=0;j<=0x10;j++);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -