📄 lcd_display.c
字号:
//************以下为液晶与凌阳SPCE061A的接线图******************
//
// VDD|--------------------|VCC
// LED+|--------------------|VCC
// LED-|--------------------|GND
// VSS|--------------------|GND
// DB0~DB7|--------------------|PA.0~PA.7
// RS|--------------------|PA.8
// RW|--------------------|PA.9
// E|--------------------|PA.10
// RST|--------------------|PA.11
//
//***********以下为各控制端口与单片机的对应关系****************
#include "SPCE061A.H"
#define uint unsigned int
#define set_RS *P_IOA_Data|=0x0100 //数据RS=1
#define clr_RS *P_IOA_Data&=0xfeff //指令RS=0
#define set_RW *P_IOA_Data|=0x0200 //读RW=1
#define clr_RW *P_IOA_Data&=0xffdf //写RW=0
#define set_E *P_IOA_Data|=0x0400 //有效E=1
#define clr_E *P_IOA_Data&=0xfbff //无效E=0
//*************************************************************
//本文件为液晶DM12232F的Drive文件,包含初始化,写数据,写指令程序
//
// void wr_comm(uint comm)
// void wr_data(uint data)
// void LCD_init()
// void chk_busy()
//
//山东大学曹香鹏
//文件最后维护时间:2007.07.20
///////////////////////////////////////////////////////////////////////////////////////////
extern unsigned int ascNow[14];
//******************************测试忙信号程序***************
void chk_busy()
{
*P_IOA_Dir&=0xff7f;
clr_RS;
set_RW;
set_E;
while(*P_IOA_Data&0x0080)*P_Watchdog_Clear=1;
*P_IOA_Dir|=0x0080;
}
//***************************向LCD写入指令**********************
void wr_comm(uint comm)
{//comm为待写入的指令
chk_busy();
*P_IOA_Data=comm;//写入的数据
set_E;//E=1
__asm("nop");//nop
clr_E;//E=0
// delay(200);//延时以防BUSY
}
//***************************向LCD写入字符**********************
void wr_data(uint data)
{ //字符得一次写入
//汉字则要求分两次写入
chk_busy();
*P_IOA_Data=0x0100;//RW=0 RS=1
*P_IOA_Data+=data;
set_E;//E=1
__asm("nop");//nop
clr_E;//E=0
}
//***************************LCD初始化程序************************
void LCD_init()
{//LCD_init
unsigned char* year="年";
unsigned char* month="月";
unsigned char* date="日";
unsigned char* day="星期";
wr_comm(0x0030);//功能设置:一次送8位数据,基本指令集
// delay(100);
wr_comm(0x0006);//点设定:显示字符/光标从左到右移位,DDRAM地址加1
wr_comm(0x000c);//显示设定:开显示,显示光标,当前显示位反白闪动
wr_comm(0x0001);//清DDRAM
wr_comm(0x0002);//DDRAM地址归位
wr_comm(0x0080);//把显示地址设为0X80,即为第一行的首位
//以下显示时,分,秒,星期,年,月,日,
wr_comm(0x81);wr_data(year[0]);wr_data(year[1]);//XX年
wr_comm(0x83);wr_data(month[0]);wr_data(month[1]);//XX月
wr_comm(0x85);wr_data(date[0]);wr_data(date[1]);//XX日
wr_comm(0x91);wr_data(':'); wr_data(' ');wr_data(' ');wr_data(':');//XX时XX分XX秒
wr_comm(0x94);wr_data(day[0]);wr_data(day[1]);wr_data(day[2]);wr_data(day[3]);//星期XX
//写入自己的信息,哈哈哈哈
wr_comm(0x86);wr_data(' ');wr_data('x');wr_data('p');
}
//以下写计时程序
void wr_year()
{//写年
wr_comm(0x80);
wr_data(ascNow[12]);
wr_data(ascNow[13]);
}
void wr_month()
{//写月
wr_comm(0x82);
wr_data(ascNow[8]);
wr_data(ascNow[9]);
}
void wr_date()
{//写日
wr_comm(0x84);
wr_data(ascNow[6]);
wr_data(ascNow[7]);
}
void wr_hour()
{//写时
wr_comm(0x90);
wr_data(ascNow[4]);
wr_data(ascNow[5]);
}
void wr_minute()
{//写分
wr_comm(0x91);
wr_data(':');
wr_data(ascNow[2]);
wr_data(ascNow[3]);
}
void wr_second()
{//写秒
wr_comm(0x93);
wr_data(ascNow[0]);
wr_data(ascNow[1]);
}
void wr_day()
{//写上星期
int i;
unsigned char* day7="日一二三四五六";
i=ascNow[11]-0x30;
wr_comm(0x96);
wr_data(day7[2*i]);
wr_data(day7[2*i+1]);
}
//以下写LCD每半秒的刷新程序
void flash_LCD()
{
wr_year();
wr_month();
wr_date();
wr_hour();
wr_minute();
wr_second();
wr_day();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -