微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STC89C52单片机12864液晶显示

STC89C52单片机12864液晶显示

时间:11-21 来源:互联网 点击:

单片机延时10us,即当iNumber=10时,延时为100us
参数介绍:iNumber:定义要延时10us的次数
返回值:
注意事项:无
///////////////////////////////////////////////////////////////////////
void DelayUs(uint iNumber)
{
for(;iNumber>0;iNumber--);
}
///////////////////////////////////////////////////////////////////////
函数名称:毫秒延时函数
函数功能:实现毫秒级的延时
参数介绍:Delay_MS: 定义需要延时的毫秒的数值
iNumber: 记录Delay_MS的数值,以for语句实现所要求的延时
iValue: 要延时毫秒所要进行的循环数值,本数值为实际测得
返回值:
注意事项:本实验是在所用晶振为12M的前提下实现的毫秒延时,本函数是通过循环的形
式完成,所以如果改变了晶振的频率,请做相应的改变
///////////////////////////////////////////////////////////////////////
void DelayMs(uint Delay_MS)
{
uint iNumber,iValue;
for(iNumber=0;iNumber{
iValue=107;
while(iValue--);
}
}
///////////////////////////////////////////////////////////////////////
函数名称:WriteLCD_CommdData
函数功能:向12864写入一条命令或一个字节的数据
参数介绍:cCommd:选择是写入命令了还是数据,当cCommd=1时,为命令,cCommd=0相反
返回值: cData:要写入的命令或数据
注意事项:无
///////////////////////////////////////////////////////////////////////
void WriteLCD_CommdData(uchar cCommd,uchar cData)
{
if(cCommd)
LCDRS=1; //数据
else LCDRS=0; //命令
Lcd_IO=cData;
LCDRW=0;
LCDEN=1;
DelayUs(30);
LCDEN=0;
}
///////////////////////////////////////////////////////////////////////
函数名称:Init_LCD()
函数功能:初始化12864液晶
参数介绍:无
返回值:
注意事项:初始化的具体过程请看12864的数据手册
///////////////////////////////////////////////////////////////////////
void Init_LCD() //液晶初始化
{
DelayUs(10); //外部复位
LCDPSB=1; //选择12864为并行模式
WriteLCD_CommdData(Commd,0x30); //基本指令格式
DelayUs(30);
WriteLCD_CommdData(Commd,0x01); //液晶清屏
DelayMs(30);
WriteLCD_CommdData(Commd,0x06); //设置显示格式,光标位置
WriteLCD_CommdData(Commd,0x0c);
}
//液晶自定义显示
void Lcd_define(uchar *str)
{
uint m,n;
WriteLCD_CommdData(Commd,0x34); //设置位扩展指令格式
for(m=0;m<32;m++)
{
for(n=0;n<8;n++)
{
WriteLCD_CommdData(Commd,0x80+m); //写纵坐标,00H--1FH
WriteLCD_CommdData(Commd,0x80+n); //写横坐标,00H--07H
WriteLCD_CommdData(Data,str[m*16+n*2]);
WriteLCD_CommdData(Data,str[m*16+n*2+1]);//连续写两个数据
}
}

for(m=32;m<64;m++)
{
for(n=0;n<8;n++)
{
WriteLCD_CommdData(Commd,0x80+m-32); //写纵坐标,00H--1FH
WriteLCD_CommdData(Commd,0x88+n); //写横坐标,08H--0FH
WriteLCD_CommdData(Data,str[m*16+n*2]);
WriteLCD_CommdData(Data,str[m*16+n*2+1]); //连续写两个数据
}
}
WriteLCD_CommdData(Commd,0x30); //基本指令格式
WriteLCD_CommdData(Commd,0x01); //清屏
DelayMs(30);
WriteLCD_CommdData(Commd,0x34); //扩展指令格式
WriteLCD_CommdData(Commd,0x36); //显示自定义图形
}
//主函数
void main()
{
wei=1;
P0=0XFF;
wei=0;
duan=1;
P0=0x00;
duan=0;

Init_LCD();
Lcd_define(Lcd_num);
while(1);
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top