📄 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 + -