📄 lcd.c
字号:
//文件名:LCD_TEST
//说明:本文件实现了对液晶12232A的功能的测试
/************************************包含的头文件***********************************/
#include <AT898252.h>
#include <intrins.h>
/***************************************定义宏**************************************/
#define uchar unsigned char
#define uint unsigned int
/*************************************端口声明**************************************/
#define DI P2_0 //12232A的指令数据选择端,H;数据,L:指令
#define RW P2_1 //12232A的读写选择信号端,H:读,L:写
#define E2 P2_2 //12232A的读写使能信号端(从机),H:读使能,L:写使能
#define E1 P2_3 //12232A的读写使能信号端(主机),H:读使能,L:写使能
#define DB P0 //12232A的数据线
/***********************************全局变量的定义***********************************/
//uchar data lcd_com; //12232A的指令缓冲器
//uchar data lcd_data; //12232A的数据缓冲器
uchar bdata lcd_status; //12232A的状态存贮缓冲器
sbit busy=lcd_status^7; //12232A的忙标志
/*************************************函数声明***************************************/
void delay_s(uint x); //延时子函数
void master_write_com(uchar lcd_com); //主机写指令函数
void slave_write_com(uchar lcd_com); //从机写指令函数
void master_write_data(uchar lcd_data); //主机写显示数据子函数
void slave_write_data(uchar lcd_data); //从机写显示数据子函数
void lcd_status_read(void); //读液晶状态子函数
void lcd_init(void); //液晶显示初始化子函数
void clear_display(void); //清显示子函数
void main(void); //显示主函数
/*********************************延时X毫秒函数**************************************/
//说明:实现功能:软件延时X毫秒
//输入:软件延时的时间:xms
//输出:无
void delay_s(uint x)
{
uint n;
while(x!=0)
{
for(n=0;n<125;n++) //一次延时1ms
{;}
x--;
}
}
/*************************************读液晶状态子函数******************************/
//说明:实现的功能:读液晶的状态
//输入:无
//输出:无
void lcd_status_read(void)
{
DI=0; //数据线上为指令代码
_nop_();
_nop_();
_nop_();
_nop_();
RW=1; //读使能
lcd_status=DB; //读操作
}
/***********************************主机写指令函数**********************************/
//说明:实现功能:向主机写指令
//输入:指令代码
//输出:无
void master_write_com(uchar lcd_com)
{
E1=1; //主机读使能
lcd_status_read(); //读液晶状态
if(busy)
{
delay_s(5);
}
_nop_();
_nop_();
_nop_();
_nop_();
E1=0; //主机写使能
_nop_();
_nop_();
_nop_();
_nop_();
RW=0; //写使能
DB=lcd_com; //写指令
delay_s(5);
E1=1;
delay_s(5);
E1=0;
}
/***********************************从机写指令函数**********************************/
//说明:实现功能:向从机写指令
//输入:指令代码
//输出:无
void slave_write_com(uchar lcd_com)
{
E2=1; //从机读使能
lcd_status_read(); //读液晶状态
if(busy)
{
delay_s(5);
}
_nop_();
_nop_();
_nop_();
_nop_();
E2=0; //从机写使能
_nop_();
_nop_();
_nop_();
_nop_();
RW=0; //写使能
DB=lcd_com; //写指令
delay_s(5);
E2=1;
delay_s(5);
E2=0;
}
/***********************************主机写显示数据子函数**********************************/
//说明:实现功能:向主机写数据
//输入:显示数据
//输出:无
void master_write_data(uchar lcd_data)
{
E1=1; //主机读使能
lcd_status_read(); //读液晶状态
if(busy)
{
delay_s(5);
}
_nop_();
_nop_();
_nop_();
_nop_();
DI=1; //数据线上为数据
delay_s(5);
E1=0; //主机写使能
_nop_();
_nop_();
_nop_();
_nop_();
RW=0; //写使能
DB=lcd_data; //写显示数据
delay_s(5);
E1=1;
delay_s(5);
E1=0;
}
/***********************************从机写显示数据子函数**********************************/
//说明:实现功能:向从机写数据
//输入:显示数据
//输出:无
void slave_write_data(uchar lcd_data)
{
E2=1; //从机读使能
lcd_status_read(); //读液晶状态
if(busy)
{
delay_s(5);
}
_nop_();
_nop_();
_nop_();
_nop_();
DI=1; //数据线上为数据
delay_s(5);
E2=0; //从机写使能
_nop_();
_nop_();
_nop_();
_nop_();
RW=0; //写使能
DB=lcd_data; //写显示数据
delay_s(5);
E2=1;
delay_s(5);
E2=0;
}
/**************************************液晶初始化子函数************************************/
//说明:函数实现对液晶的初始化:1:复位,2:选择动态驱动,3:选择1/32的占空比,4:选择正向排列顺序
// 5:设置显示起始行为第一行,6:开显示
//输入:无
//输出:无
void lcd_init(void)
{
master_write_com(0xe2);
slave_write_com(0xe2); //复位
master_write_com(0xa4);
slave_write_com(0xa4); //选择动态驱动
master_write_com(0xa9);
slave_write_com(0xa9); //选择占空比:1/32
master_write_com(0xa0);
slave_write_com(0xa0); //选择正向排列顺序
master_write_com(0xc0);
slave_write_com(0xc0); //显示起始行为第一行
master_write_com(0xaf);
slave_write_com(0xaf); //开显示
}
/***************************************清显示子函数************************************/
//说明:清屏
//输入:无
//输出:无
void clear_display(void)
{
uchar i; //页数
uchar j; //列数
for(i=0;i<4;i++)
{
master_write_com(i);
slave_write_com(i); //选取页地址
for(j=0;j<80;j++)
{
master_write_com(j);
slave_write_com(j); //选取列地址
master_write_data(0);
slave_write_data(0); //清列
}
}
}
/***************************************显示主函数***************************************/
//说明:对液晶12232A的性能测试
//输入:无
//输出:无
void main(void)
{
uchar i;
uchar j;
lcd_init(); //显示初始化
clear_display(); //清屏
for(i=0;i<4;i++)
{
master_write_com(i);
slave_write_com(i); //选取页地址
for(j=0;j<61;j++)
{
master_write_com(j);
slave_write_com(j); //选取列地址
master_write_data(0xaa);
slave_write_data(0xaa); //送显示数据
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -