📄 12864final.c.bak
字号:
/*************************************************
*COMPANY : 北斗星工业化学研究所
*NAME : 12864液晶驱动源文件
*AUTHOR : 王敬明
*FUNCTIONG : 显示汉字和英文字母及数字
*ADD : 驱动芯片HD16202
*VERSION : V1.0
***************************************************/
#include<ADI/ADuC834.h>
#include"ziku.h"
/***************宏定义及位定义*********************/
#define busy 0x80
#define uchar unsigned char
#define uint unsigned int
#define LCD_DATA P0
void LCD_Clr();
sbit LCD_RS=P2^3;
sbit LCD_RW=P2^4;
sbit LCD_EN=P2^5;
sbit LCD_CSA=P2^6;
sbit LCD_CSB=P2^7;
sbit LCD_RST=P2^2;
//void delay(uint t)
//{
// uint i,j;
// for(i=0;i<t;i++)
// for(j=0;j<10;j++);
//}
/***************AD转换器初始化*******************/
void ADC_Init(void)
{
SF = 0xFF; //最慢的转换速度效果最好
ADC0CON = 0x0F;//一通道,单极性,内部参考电源,输入范围0~2.56V
ADCMODE = 0x23;//连续转换
}
/***************读液晶状态字*********************/
unsigned char ReadLCDStatus(void)
{
LCD_DATA = 0xFF;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 0;
LCD_EN = 0;
LCD_EN = 1;
while (LCD_DATA & busy); //检测忙信号
// delay(1);
LCD_EN = 0;
return(P0);
}
/*****************写液晶命令*********************/
void WriteLCD_Command(uchar Command)
{
ReadLCDStatus ();
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA = Command;
LCD_EN = 1;
// delay(1);
LCD_EN = 0;
}
/*****************写液晶数据*********************/
void WriteLCD_Data(unsigned char Data)
{
ReadLCDStatus();
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA = Data;
LCD_EN = 1;
// delay(1);
LCD_EN=0;
}
/*****************初始化液晶*********************/
void LCD_Init()
{
WriteLCD_Command(0x3E);
WriteLCD_Command(0xC0);
WriteLCD_Command(0x3F);
LCD_Clr();
LCD_CSB=0;
LCD_CSA=1;
}
/*****************显示汉字数据*******************/
/************Page0~7、Rom0~63、汉字数组**********/
void LCD_Display_Word(unsigned char Page,unsigned char Rom,unsigned char *Data)
{
unsigned char i;
if(Rom>63)
{
LCD_CSB=1;
LCD_CSA=0;
}
else
{
LCD_CSB=0;
LCD_CSA=1;
}
if((LCD_CSA==1)&&(LCD_CSB==0))
{
WriteLCD_Command(0xB8+Page);//页地址
WriteLCD_Command(0x40+Rom);//列地址
for(i=0;i<16;i++)
{
WriteLCD_Data(Data[i]);
}
WriteLCD_Command(0xB8+Page+1);//页地址+1
WriteLCD_Command(0x40+Rom);//列地址
for(i=16;i<32;i++)
{
WriteLCD_Data(Data[i]);
}
}
if((LCD_CSA==0)&&(LCD_CSB==1))
{
WriteLCD_Command(0xB8+Page);//页地址
WriteLCD_Command(0x40+(Rom-64));//列地址
for(i=0;i<16;i++)
{
WriteLCD_Data(Data[i]);
}
WriteLCD_Command(0xB8+Page+1);//页地址+1
WriteLCD_Command(0x40+(Rom-64));//列地址
for(i=16;i<32;i++)
{
WriteLCD_Data(Data[i]);
}
}
}
/*****************显示字符数据*******************/
void LCD_Display_Eng(unsigned char Page,unsigned char Rom,unsigned char *Data)
{//页0~7、列0~63、汉字数组
unsigned char i;
if(Rom>63)
{
LCD_CSB=1;
LCD_CSA=0;
}
else
{
LCD_CSB=0;
LCD_CSA=1;
}
if((LCD_CSA==1)&&(LCD_CSB==0))
{
WriteLCD_Command(0xB8+Page);//页地址
WriteLCD_Command(0x40+Rom);//列地址
for(i=0;i<8;i++)
{
WriteLCD_Data(Data[i]);
}
WriteLCD_Command(0xB8+Page+1);//页地址+1
WriteLCD_Command(0x40+Rom);//列地址
for(i=8;i<16;i++)
{
WriteLCD_Data(Data[i]);
}
}
if((LCD_CSA==0)&&(LCD_CSB==1))
{
WriteLCD_Command(0xB8+Page);//页地址
WriteLCD_Command(0x40+(Rom-64));//列地址
for(i=0;i<8;i++)
{
WriteLCD_Data(Data[i]);
}
WriteLCD_Command(0xB8+Page+1);//页地址+1
WriteLCD_Command(0x40+(Rom-64));//列地址
for(i=8;i<16;i++)
{
WriteLCD_Data(Data[i]);
}
}
}
/********************清屏幕**********************/
void LCD_Clr()
{
unsigned char j,i;
WriteLCD_Command(0xB8);
WriteLCD_Command(0x40);
for(i=0;i<8;i++)
{
WriteLCD_Command(0xB8+i);
WriteLCD_Command(0x40);
for(j=0;j<128;j++)
{
WriteLCD_Data(0x00);
}
}
}
/********************显示文档*********************/
void Display_Text(void)
{
LCD_Display_Word(0,16,dis1); //北
LCD_Display_Word(0,32,dis2); //斗
LCD_Display_Word(0,48,dis3); //星
LCD_Display_Word(0,64,dis4); //工
LCD_Display_Word(0,80,dis5); //化
LCD_Display_Word(0,96,dis6); //所
LCD_Display_Eng(2,32,dis7); //b
LCD_Display_Eng(2,40,dis8); //i
LCD_Display_Eng(2,48,dis9); //g
LCD_Display_Eng(2,56,dis10); //-
LCD_Display_Eng(2,64,dis11); //d
LCD_Display_Eng(2,72,dis12); //i
LCD_Display_Eng(2,80,dis13); //p
LCD_Display_Eng(2,88,dis14); //p
LCD_Display_Eng(2,96,dis15); //e
LCD_Display_Eng(2,104,dis16); //r
LCD_Display_Eng(4,48,dis17); //1
LCD_Display_Eng(4,56,dis18); //2
LCD_Display_Eng(4,64,dis19); //8
LCD_Display_Eng(4,72,dis20); //6
LCD_Display_Eng(4,80,dis21); //4
LCD_Display_Word(6,48,dis22);//王
LCD_Display_Word(6,64,dis23);//敬
LCD_Display_Word(6,80,dis24);//明
}
/******************主体函数**********************/
void main()
{
// LCD_RST = 0;
// delay(5);
// LCD_RST = 1;
LCD_Init();
// Display_Text();
while(1)
{}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -