📄 19264.c
字号:
//***************************************************************************
//***************************************************************************
//连线表: CPU=C8051F020/022 *
//RW=P1.0 CS1=P1.1 CS2=P1.2 CS2=P1.3 CS3=P1.3 DI=P1.5 *
//SysClock=16MHz DB0-DB7=P2.0-P2.7 /Reset=P1.6 *
//硬件连接使用11K电阻接5V做上来,实现液晶的显示测试,实现了液晶显示的打网格 *
//和汉字显示 ,采用C8051F020做控制。
//***************************************************************************
#include "LCD.h"
#include "stdlib.h"
#include "intrins.h"
#include "stdio.h"
/********************引脚定义********************/
sbit LCD_RW =P1^0; //数据指令
sbit LCD_CSL =P1^1; //读写
sbit LCD_CSM =P1^2; //使能
sbit LCD_CSR =P1^3; //左片选
sbit LCD_DI =P1^4; //中片选
sbit LCD_E =P1^5; //右片选
sbit LCD_RST =P1^6; //复位
unsigned char Page; //页 地址
unsigned char Col; //列 地址
unsigned char DataT;
unsigned char Chinese[]={
/*-- 文字: 侯 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x20,0xF8,0x07,0x12,0x10,0xF2,0x52,0x52,0xD2,0x52,0x5E,0x50,0x50,0x10,0x00,
0x00,0x00,0xFF,0x00,0x82,0x43,0x22,0x12,0x0A,0x07,0x1A,0x22,0x62,0xC2,0x42,0x00,
/*-- 文字: 文 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x08,0x08,0x08,0x78,0x88,0x09,0x0E,0x08,0x88,0x78,0x08,0x08,0x08,0x08,0x00,
0x40,0x40,0x40,0x20,0x20,0x11,0x0A,0x04,0x0A,0x11,0x10,0x20,0x60,0x20,0x20,0x00,
/*-- 文字: 科 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,
0x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04,0x04,0x02,0x02,0x02,0xFF,0x01,0x01,0x00,
};
void Delay(unsigned int MS);
void wtcom(void);
/***************************/
/*写指令 */
/***************************/
void WriteCommandL( unsigned char CommandByte )
{
Delay(1);
LCD_CSL=0;
LCD_RW =0;
LCD_DI =0;
P2 = CommandByte;
Delay(1);
LCD_E = 1;
_nop_();
Delay(1);
LCD_E = 0;
_nop_();
LCD_CSL=1;
}
void WriteCommandM( unsigned char CommandByte )
{
Delay(1);
LCD_CSM =0;
LCD_RW =0;
LCD_DI =0;
P2 = CommandByte;
Delay(1);
LCD_E = 1;
_nop_();
Delay(1);
LCD_E = 0;
_nop_();
LCD_CSM=2;
}
void WriteCommandR( unsigned char CommandByte )
{
Delay(1);
LCD_CSR=0;
LCD_RW =0;
LCD_DI =0;
P2 = CommandByte;
Delay(1);
LCD_E = 1;
_nop_();
Delay(1);
LCD_E = 0;
_nop_();
LCD_CSR=1;
}
/***************************/
/*写数据 */
/***************************/
void WriteDataL( unsigned char DataByte )
{
LCD_CSL=0;
LCD_RW =0;
LCD_DI =1;
P2 = DataByte; /*数据输出到数据口 */
Delay(1);
LCD_E = 1;
_nop_();
LCD_E = 0;
LCD_CSL=1;
}
void WriteDataM( unsigned char DataByte )
{
LCD_CSM=0;
LCD_RW =0;
LCD_DI =1;
P2 = DataByte; /*数据输出到数据口 */
LCD_E = 1;
/*写入到LCM*/
Delay(1);
_nop_();
LCD_E = 0;
_nop_();
LCD_CSM=1;
}
void WriteDataR( unsigned char DataByte )
{
LCD_CSR=0;
LCD_RW =0;
LCD_DI =1;
Delay(1);
P2 = DataByte; /*数据输出到数据口 */
LCD_E = 1; /*写入到LCM*/
_nop_();
_nop_();
LCD_E = 0;
LCD_CSR=1;
}
/***************************/
/*检查Busy */
/***************************/
/*void wtcom(void)
{
RS = 0; //指令
RW = 1;
P1 = 0xFF; //输出0xff以便读取正确
E = 1;
_nop_();
while(P1 & 0x80); //Status Read Bit7 = BUSY
E = 0;
_nop_();
}
/***************************/
/*读数据 */
/***************************/
/*
unsigned char ReadData( void )
{
unsigned char DataByte;
/*坐标定位,返回时保留分区状态不变 */
// RS = 1; /*数据输出*/
// RW = 1; /*读入 */
// P1 = 0xFF; //输出0xff以便读取正确
// E = 1; /*读入到LCM*/
// _nop_();
// DataByte = P1; /*数据读出到数据口P1 */
// E = 0;
// _nop_();
// return DataByte;
//}
void LcmInit( void )
{
LCD_RST=1;
LCD_RST=1;
WriteCommandL(0x3E); //开显示
WriteCommandM(0x3E);
WriteCommandR(0x3E);
WriteCommandL(0x3f); //开显示
WriteCommandM(0x3f);
WriteCommandR(0x3f);
WriteCommandL(0xc0); //设置起始地址=0
WriteCommandM(0xc0);
WriteCommandR(0xc0);
WriteCommandL(0xB8); //
WriteCommandM(0xB8);
WriteCommandR(0xB8);
WriteCommandL(0x40); //
WriteCommandM(0x40);
WriteCommandR(0x40);
}
void Delay(unsigned int MS)
{
unsigned char us,usn;
while(MS!=0)
{
usn = 2; //for 12M
while(usn!=0)
{
us=0xf6;
while (us!=0){us--;};
usn--;
}
MS--;
}
}
void Col_Page(void)
{
WriteCommandL(Col); //
WriteCommandM(Col);
WriteCommandR(Col);
WriteCommandL(Page); //
WriteCommandM(Page);
WriteCommandR(Page);
}
void Disp_Table(unsigned char DataT){
unsigned char Y_Number,Page_Adr;
for(Page_Adr=0;Page_Adr<8;Page_Adr++){
for(Y_Number=0;Y_Number<64;Y_Number++)
{
WriteDataL(DataT);
WriteDataM(DataT);
WriteDataR(DataT);
}
Page++;
Col_Page();
}
Page=0xb8;
}
unsigned char Read_Data(void){
unsigned char readdata2;
LCD_RW=1;
LCD_DI=1;
LCD_CSL=0;
P2=0xff;
Delay(2);
LCD_E=0;
//readdata1=P2;
Delay(1);
LCD_E=1;
Delay(1);
readdata2=P2;
LCD_CSL=1;
return readdata2;
}
void Disp_Chinese(){
unsigned char dot;
LcmInit();
for(dot=0;dot<96;dot++)
{
if(dot==16){
Col=0x40;
Page++;
WriteCommandL(Col);
WriteCommandL(Page);
}
if(dot==32){
Page--;
WriteCommandL(Page);
}
if(dot==48){
Page++;
Col=0x50;
WriteCommandL(Col);
WriteCommandL(Page);
}
if(dot==64){
Page--;
WriteCommandL(Page);
}
if(dot==80){
Page++;
Col=0x60;
WriteCommandL(Col);
WriteCommandL(Page);
}
WriteDataL(Chinese[dot]);
}
}
//==============================================
// 主函数
//==============================================
void main( void )
{
Init_Device();
Delay(200); //等待复位
Col=0x40;
Page=0xb8;
LcmInit();
while(1)
{
LCD_RST=1;
WriteCommandL(0x3f); //开显示
WriteCommandM(0x3f);
WriteCommandR(0x3f);
DataT=0x81;
Disp_Table(DataT);
Read_Data();
P5=0x0e;
Delay(3000);
P5=0x0d;
DataT=0x18;
Disp_Table(DataT);
Read_Data();
Delay(2500);
P5=0xfb;
DataT=0x00;
Disp_Table(DataT);
Delay(2500);
P5=0xf7;
DataT=0xff;
Disp_Table(DataT);
Delay(2500);
DataT=0x00;
Disp_Table(DataT);
Disp_Chinese();
while(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -