?? lcd.c
字號:
/************************************************************
程序功能概述
利用uPSD3251的P4端口,采用并口方式控制實驗開發系統上的LCD,
使其依次實現:
1.第0行的顯示內容"uPSD32XX DEV-KIT"從右邊滾動輸入;
2.0.5s后,第1行的顯示內容"P&S-ECNU-031025"在左邊以右移方式輸入;
3.靜態顯示2s后,畫面向左滾動循環一周;
4.靜態顯示2s后,畫面向右滾動循環一周;
5.靜態顯示2s后,清屏,返回1重復顯示過程
連線圖: *LCD----uPSD3251* *LCD---uPSD3251*
*DB4----P4.4* *RS----P4.0*
*DB5----P4.5* *RW----P4.1*
*DB6----P4.6* *E-----P4.2*
*DB7----P4.7*
晶振頻率為11.0592MHz
*************************************************************/
#include <upsd.h>
#define uchar unsigned char
#define uint unsigned int
sbit E=P4^2; // LCD使能信號
uchar BUSYFLAG;
/*軟件延時,長度由形參count決定,單位ms*/
void delay_ms(uint count)
{
uint i,j;
for(i=0;i<count;i++)
for(j=0;j<113;j++); //1ms延時
}
/*檢測LCD控制器狀態,等待LCD控制器狀態空閑*/
void WaitIdle(void)
{
do
{
P4 = 0xf2;// P4.4~P4.7置位,準備讀;RS=0 RW=1,讀指令寄存器
E = 1;
BUSYFLAG=P4&0x80;
E=0;
E=1;
E=0;
}
while(BUSYFLAG);
}
/*****向LCD寫入指令代碼*****/
void WriteCom(uchar com)
{
WaitIdle();
P4=com&0xf0; // RS=0,RW=0,寫指令寄存器;寫入指令代碼的高四位
E=1;
E=0;
P4=com<<4; // 寫入指令代碼的低四位
E=1;
E=0;
}
/*****向LCD寫入數據*****/
void WriteDat(uchar dat)
{
WaitIdle();
P4=dat&0xf0|0x01; // RS=1,RW=0,寫數據寄存器;寫入數據的高四位
E=1;
E=0;
P4=(dat<<4)|0x01; // 寫入數據的低四位
E=1;
E=0;
}
/*LCD軟件復位,初始化工作方式為4位總線*/
void lcd_init(void)
{
P4 = 0x30; E = 1; E = 0; delay_ms(10);
P4 = 0x30; E = 1; E = 0; delay_ms(10);
P4 = 0X20; E = 1; E = 0;
WriteCom(0x28); // 設置工作方式為4位總線
WriteCom(0x01); // 清屏
WriteCom(0x0C); // 設置顯示方式:畫面顯示,光標不顯示不閃爍
}
/*向LCD寫入一行數據,每200ms寫入一個*/
void Enter(uchar inputmode,uchar addr,uchar *tabptr)
{
uchar i;
WriteCom(inputmode); // 設置輸入方式
WriteCom(addr); // 設置DDRAM地址
for(i=0; i<16; i++)
{
WriteDat(*tabptr++); // 寫數據
delay_ms(200);
}
}
/*滾動演示程序,每200ms滾動1個字符位*/
/*形參scrollmode決定滾動模式,len決定滾動字符位數*/
void scroll(uchar scrollmode,uchar len)
{
uchar i;
for(i=0; i<len; i++)
{
WriteCom(scrollmode);// 設置畫面滾動1個字符位
delay_ms(200);
}
}
main()
{
WDKEY=0x55;
lcd_init();
while(1)
{
Enter(0x07,0x90,"uPSD32XX DEV-KIT");// LCD上第0行的內容從右邊向左滾動輸入
delay_ms(500);
Enter(0x06,0xd0,"P&S-ECNU-031025 ");// 第1行的內容從左邊右移輸入
delay_ms(2000); //靜態顯示2s
scroll(0x18,40); //畫面滾動左移40個字符位
delay_ms(2000);
scroll(0x1c,40); //畫面滾動右移40個字符位
delay_ms(2000);
WriteCom(0x01); // 清屏
delay_ms(2000);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -