📄 acm-12864汉字液晶显示驱动程序.txt
字号:
qushu(0xe,TAB1A); //调用取数函数,共14个数据,保存在数组TAB1A里
}
//-------------------------------------------
//显示学校web函数
void han_wr2b()
{
send_i(0x90); //设置显示位置:第二行
qushu(0x10,TAB1B); //调用取数函数,共16个数据,保存在数组TAB1B里
}
//-------------------------------------------
//显示学校tel函数
void han_wr2c()
{
send_i(0x88); //设置显示位置:第三行
qushu(0X10,TAB1C); //调用取数函数,共16个数据,保存在数组TAB1C里
}
//-------------------------------------------
//显示学校fax函数
void han_wr2d()
{
send_i(0x98); //设置显示位置:第四行
qushu(0X10,TAB1D); //调用取数函数,共16个数据,保存在数组TAB1D里
}
//有关显示设置函数
void wr_zb()
{
send_i(lcd_y);
send_i(lcd_x);
}
//-------------------------------------------
//显示闪烁函数
void flash()
{
send_i(0x08); //关显示
delay1(); //延长一定时间
send_i(0x0c); //开显示
delay1();
delay1(); //延长关显示两倍的时间
send_i(0x08); //关显示
delay1();
send_i(0x0c); //开显示
delay1();
delay1();
send_i(0x08); //关显示
delay1();
send_i(0x0c); //开显示
delay1();
delay1();
}
继续
//-------------------------------------------
//清屏函数
void clear_p()
{
send_i(0x1); //清除所有显示
send_i(0x34); //扩展指令操作
send_i(0x30); //基本指令操作
}
//------------------------------------------
//查表函数
void qushu(int counts,const unsigned char *ps)
{
int i; //定义循环变量
for(i=counts;i>0;i--) //循环counts次
{
send_d(*ps); //查表取数并调用显示一个字节数据函数送显示
delay(); //延长一定时间,确保能看到数据一个个的显示出来
ps++; //取下一个数据
}
}
//-------------------------------------------
//显示一字节数据函数
void send_d(unsigned char x)
{
chk_busy(); //检测LCD是否工作繁忙
rs=1; //设置该字节数据是显示数据
rw=0; //设置该次操作为写
PORTD=x; //送数据口PORTD
e=1; //使能
nop();
nop();
nop();
e=0; //禁止
}
//--------------------------------------------
//送一字节命令代码函数
void send_i(unsigned char x)
{
chk_busy(); //检测LCD是否工作繁忙
rs=0; //设置该字节数据为控制命令
rw=0; //设置此次操作为写
PORTD=x; //送数据口PORTD
e=1; //使能
nop();
nop();
nop();
e=0; //禁止
}
//-------------------------------------------
//检测LCD是否工作繁忙
void chk_busy()
{
busy=1; //先置位繁忙标志位
TRISD=0XFF; //更改通信为输入
rs=0; //设置该字节数据为命令代码
rw=1; //设置此次操作为读
while(busy)
{
nop();
nop();
nop();
e=1; //使能
nop();
nop();
nop();
if(!RD7) busy=0; //检测LCD是否工作繁忙
nop();
nop();
nop();
e=0; //禁止
}
e=0; //禁止
TRISD=0X00; //恢复通信为输出
}
//-------------------------------------------
//延时函数
void delay()
{
int i;
for(i=0;i<5000;i++)
{;}
}
//-------------------------------------------
//延时函数1
void delay1()
{
int i;
for(i=0;i<10;i++)
{
delay(); //调用延时函数
}
}
//带中文字库的12864LCD显示程序
#include <reg52.H>
#include <intrins.H>
#define uchar unsigned char
#define uint unsigned int
sbit dula = P2^6;
sbit wela = P2^7;
//SCM12864-05端口定义
#define LCD_DATA P0 //数据口
sbit RS = P3^5; //并行的指令/数据选择信号, H数据, L命令
sbit RW = P3^6; //并行读写选择信号, H读, L写
sbit E = P3^4; //并行使能端, H有效, L无效
sbit PSB = P3^7; //并/串接口选择, H并,L串
sbit RET = P3^3; //复位, L有效
uchar code datas1[] = {"广东工业大学"};
uchar code datas2[] = {"自动化学院2004级"};
uchar code datas3[] = {"网络工程 (4)班"};
uchar code datas4[] = {"fengmk2@gmail.com"};
//延时约2us
void delayUs()
{
_nop_();_nop_();
}
//延时 a * 1ms
void delayMs(uint a)
{
uint i, j;
for(i = a; i > 0; i--)
for(j = 100; j > 0; j--);
}
//检测LCD是否处于忙状态, 若忙返回1, 空闲返回0
bit checkBusy()
{
bit busy;
RS = 0;
RW = 1;
E = 1;
delayUs();
busy = (bit)(LCD_DATA&0x80);
E = 0;
return busy;
}
//等待LCD到空闲
void wait()
{
while(checkBusy());
}
//写命令
void writeCmd(uchar cmd)
{
wait();
RS = 0;
RW = 0;
E = 0;
delayUs();
LCD_DATA = cmd;
delayUs();
E = 1;
delayUs();
E = 0;
}
//写数据
void writeData(uchar dat)
{
wait();
RS = 1;
RW = 0;
E = 0;
delayUs();
LCD_DATA = dat;
delayUs();
E = 1;
delayUs();
E = 0;
}
//初始化LCD
void init()
{
PSB = 1; //并口方式
writeCmd(0x30); //基本指令, 扩充指令为34H
delayMs(10);
writeCmd(0x0c); //显示开, 关光标
delayMs(10);
writeCmd(0x01); //清屏
delayMs(10);
}
void setPosition(uchar x, uchar y)
{
uchar p;
switch(x%4)
{
case 0: p = 0x80; break; //第一行开始地址
case 1: p = 0x90; break; //第二行
case 2: p = 0x88; break; //第三行
case 3: p = 0x98; break; //第四行
}
p += y;
writeCmd(p);
}
void writeString(uchar * str)
{
uchar i = 0;
while(str[i] != '\0')
{
writeData(str[i++]);
}
}
/**//***************************LCD12864***************************************/
void main()
{
//先关闭数码管, 使两个锁存器锁存, 因开了数码管, USB电压驱动不够, 将无法使LCD正常工作
dula = wela = 0;
init();
setPosition(0, 0);
writeString(datas1);
setPosition(1, 0);
writeString(datas2);
setPosition(2, 0);
writeString(datas3);
setPosition(3, 0);
writeString(datas4);
while(1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -