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

📄 lcd_test.c

📁 本程序主要是用来测试LC75823E这款显示芯片是否工作正常。
💻 C
字号:
/********************************************************
功能描述: LC75823E芯片测试程序
说明:本测试程序能够测试LC75823E的每一个字段,依次点亮每一个字段
********************************************************/
#include " REGX51.h "
#include " intrins.h "
#include <stdio.h>
#include <absacc.h>

sbit LCD_SCL = P3^5;                                    //LC75823E的SCLk引脚
sbit LCD_SDA = P3^1;                                    //LC75823E的SDA引脚
sbit LCD_CE = P3^3;                                    //LC75823E的sce引脚

//按键定义
sbit keya=P2^1;
sbit keyb=P2^0;

#define uchar unsigned char
#define uint unsigned int

#define LCD_BUFFER_SIZE    20//20*8 = 160
#define LC75823E_ADDRESS   0x41
#define DR_1_2_BIAS        0 
#define DR_1_3_BIAS        1 
#define SC_ON              0 
#define SC_OFF             1 
#define BU_NORMAL          0 
#define BU_POWER_SAVING    1 


unsigned char a,b;//a(20)表示LC75823E的内存区中的byte数;
                  //b(10)表示对应的byte中的数据段,设置了10个数,
				  //0表示不显示,9表示全部显示,1~8表示byte对应的段
				                     
unsigned char display_flag;//更改显示标志
unsigned char LEDScanPointer;
unsigned char displaya,displayb,displayc,displayd;
unsigned char code LEDCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0~9共阳数码管代码 
unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管位选代码
uchar LC75823E_buff[20];//LC75823E的内存数据区,共20个byte			 	
/********************************************************
函数名称:延时函数
功能描述: 
全局变量:
参数说明:
返回说明:
说明:
********************************************************/
void delay_nms(unsigned int n)
{
 unsigned int i;
 unsigned char j;
 for(i=0;i<n;i++)
    for(j=0;j<120;j++)
	  ; //空操作
}
/********************************************************
函数名称:LC75823_Write_Buffer()
功能描述:向LC75823E一次性发送地址码、显示位、控制码 
全局变量:
参数说明:
返回说明:
说明:地址码共8bit、显示位与控制码一共20byte
********************************************************/
void LC75823_Write_Buffer() reentrant
{ 
   uint temp; 
   uchar i,j,ccb_address = LC75823E_ADDRESS; 

    //发送地址码0x41//
   LCD_CE = 0; 
   for (i=0;i<8;i++)
   {
      LCD_SCL=0;
	  if(ccb_address&0x01)
	  LCD_SDA = 1;
	  else
	  LCD_SDA = 0;	  
	  ccb_address>>=1;
	  LCD_SCL=1;		   	  
   }

   LCD_CE = 1; 

     //发送显示位与控制位//
   for (j=0;j<LCD_BUFFER_SIZE;j++) 
   { 
      temp = LC75823E_buff[j];
	  if (j == LCD_BUFFER_SIZE-1) 
      { 
		temp|=0x80;//最后最后一个byte的高4位为控制位:DR,SC,BU,*
      }      	   //0001:DR(0)1/2偏压;SC(0)segment on;BU(0)Normal mode;* 1
      for(i=0;i<8;i++) 
      { 	     	
		 LCD_SCL=0;
	     if(temp&0x01)
	     LCD_SDA = 1;
	     else
	     LCD_SDA = 0;	  
	     temp>>=1;
	     LCD_SCL=1;
      } 
   } 
   LCD_CE=0; 
   LCD_SDA=1; 
   LCD_SCL=1; 
} 
/********************************************************
函数名称:LCD_init()
功能描述: LC75823E初始化
全局变量:
参数说明:
返回说明:
说明:
********************************************************/
void LCD_init()
{
  delay_nms(100);
  LCD_CE = 1;
  delay_nms(20);
  LCD_CE=0;
  delay_nms(10);
  LCD_SCL=0;
  LCD_SDA=0;
}
/********************************************************
函数名称:main()
功能描述: LC75823E测试主函数
全局变量:
参数说明:
返回说明:
说明:可以测试出LC75823E显示屏的156个点的位置
********************************************************/
void main()
{
   TMOD=0x01;
   TH0=(65536-5000)/256;
   TL0=(65536-5000)%256;
   TR0=1;
   ET0=1;
   EA=1;
   
   a=0;
   b=0;
   display_flag=0;
   LCD_init();

   LC75823_Write_Buffer();
 while(1)
    { if(keya==0)
        {
          delay_nms(200);
          if(keya==0)
            {
              a++;       
			  if(a==20)  {  a=0;  }//按键A用于记数内存区 byte个数
              display_flag=1;
              while(keya==0);
            }
        }
       if(keyb==0)
         {
           delay_nms(200);
           if(keyb==0)
            {
              b++;
              if(b==10)  {  b=0;  } //按键B用于记数每个byte中对应的显示位,
	                                //设置10个数,0表示不显示;9表示全部显示
									//1~8表示对应的8个显示位
              display_flag=1;
              while(keyb==0);
            }
         }
    //LED显示当前按键的按下次数//
	 displaya=a/10;
     displayb=a%10;
     displayc=b/10;
     displayd=b%10;
     }
 }
/********************************************************
函数名称:
功能描述:
全局变量:
参数说明:
返回说明:
说明:
********************************************************/
 void timer0(void) interrupt 1
{
  TH0=(65536-5000)/256;
  TL0=(65536-5000)%256;
  switch(LEDScanPointer)
     {
       case 0:
             P0=LEDCode[displaya]; 
			 P1=bitcode[3];
		   break;
       case 1:
             P0=LEDCode[displayb]; 
			 P1=bitcode[2];
		   break;
       case 2:
             P0=LEDCode[displayc]; 
			 P1=bitcode[1]; 
		   break;
       case 3:
             P0=LEDCode[displayd]; 
			 P1=bitcode[0]; 
	       break;
    }
  
  LEDScanPointer++;
  if(LEDScanPointer==4) LEDScanPointer=0;
  if(display_flag==1)
  {
       unsigned char  dataT;
	   uint temp;
	   temp = a;	   
	   switch(b)
   {
          //不显示数据标志//
       case 0 : dataT=0x00;   break;
	   
	   	//显示低4bit对应的数据段//																 
   	   case 1 : dataT=0x01;   break;
   	   case 2 : dataT=0x02;   break;
   	   case 3 : dataT=0x04;   break;
	   case 4 : dataT=0x08;   break;

		//显示高4bit对应的数据段//
	   case 5 : dataT=0x10;   break;
   	   case 6 : dataT=0x20;   break;
   	   case 7 : dataT=0x40;   break;
	   case 8 : dataT=0x80;   break;

		 //全部显示//
	   case 9 : dataT=0xff;   break;	  
   } 
   
  LC75823E_buff[temp]|=dataT;//向LC75823E内存区送数   
  LC75823_Write_Buffer();//向LC75823E写数据
  display_flag=0;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -