⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 19264.c

📁 压缩包中的文件19264.c为液晶测试程序
💻 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 + -