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

📄 1621_driver.c

📁 这是本人开发的商务话机的LCD显示模块驱动!keil c下编译通过!在89s52片上调试!LCD驱动芯片是1621,有需要的朋友可以参考!
💻 C
字号:
/*HT1621 for  KM3009/KM3005/KM3004 */
#include <reg2051.h>  /* 8051 寄存器定义 */
#define null	0

typedef  unsigned char uchar;
typedef  unsigned int  uint;

sfr	PIM0	= 0X91;
sfr PIM1	= 0X92;
sfr P3M0	= 0XB1;
sfr P3M1	= 0XB2;

uchar d[16];
extern void intinit (void);
void ShowLCD(uchar signal,uchar battery,bit clr,bit in,bit out,bit lose,bit sign,uchar addr,uchar *str,uchar unit);
//extern void ShowLCD(uchar *str);

//        sbit  _CS =P3^1;
  //      sbit  _WR =P3^0;
    //    sbit  _DAT=P1^1;
     	sbit 	_CS = P3^7;
		sbit	_WR = P1^0;
		sbit	_DAT= P3^2;
	    /*the codes for 0~9 AbcdEF */
        uchar code 
      TAB1[]={0xd7,0x50,0xe3,0xf1,0x74,0xb5,0xb7,0xd0,0xf7,0xf5,0xf6,0x37,0x23,0x73,0xa7,0xa6};
       
        DELAY(int t)   /**/
        {
           int i,j;
              for (i=0;i<t;i++)
                for (j=0;j<t;j++);
         } 
        WRITE_COM(uchar com)  /*Write a command to LCD*/
        {
         uchar i;
         bit   Cy;
         _CS = 0;
      /*Write CMD code:100*/
              _WR=0;
			  DELAY(10);
              _DAT=1;
 			  DELAY(10);
             _WR=1;
 			  DELAY(10);
             
              _WR=0;
			  DELAY(10);
              _DAT=0;
			  DELAY(10);
              _WR=1;
			  DELAY(10);
              
              _WR=0;
			  DELAY(10);
              _DAT=0;
			  DELAY(10);
              _WR=1;
			  DELAY(10);
         for(i=0;i<8;i++) /*Write CMD */
         {
            Cy=com&0x80;
            _WR=0;
			  DELAY(10);
            _DAT=Cy;
			  DELAY(10);
            _WR=1;
			  DELAY(10);
            com=com<<1; 
         }
         _WR=0;
         _DAT=1;
         _WR=1;
         _CS=1;
        }
        /*------------------*/  
        WRITE_DAT(uchar addr,uchar dat)  /*Write display data to LCD*/
       {
         uchar i;
         bit   Cy;
         _CS = 0;
       /*Write CMD code:101*/
              _WR=0;
			  DELAY(10);
              _DAT=1;
			  DELAY(10);
              _WR=1;
              
			  DELAY(10);
              _WR=0;
			  DELAY(10);
              _DAT=0;
			  DELAY(10);
              _WR=1;
              
			  DELAY(10);
              _WR=0;
			  DELAY(10);
              _DAT=1;
			  DELAY(10);
              _WR=1;
			  DELAY(10);
              addr=addr<<2;
         for(i=0;i<6;i++) /*Write RAM address: xxA5~A0*/
         {
            Cy=addr&0x80;
            _WR=0;
			  DELAY(10);
            _DAT=Cy;
			  DELAY(10);
            _WR=1;
			  DELAY(10);
            addr=addr<<1; 
         }
         for(i=0;i<4;i++) /*Write Display data :xxxxC0~C3*/
         {
            Cy=dat&0x80;
            _WR=0;
			  DELAY(10);
            _DAT=Cy;
			  DELAY(10);
            _WR=1;
			  DELAY(10);
            dat=dat<<1; 
         }
         _CS=1;
        }

       DIS(uchar dat){
          uchar i;
          for(i=0;i<32;i++)
             WRITE_DAT(i,dat);
        }
        SETUP_LCD(void)
        {
          DELAY(1000);
          WRITE_COM(0x01); 	/*Enable system*/
          WRITE_COM(0x18); 	/*CLOCK SOURCE IS 256kRC ON CHIP*/
          WRITE_COM(0x29); 	/*BIAS=1/3 DUTY=1/4*/
          WRITE_COM(0x03); 	/*Display on*/
          DIS(0x00); 		/*Clear LCD*/
          DELAY(200);
        }
        main()
        {
//          PIM0 = 0;
//		  PIM1 = 0X02;
//		  P3M0 = 0;
//		  P3M1 = 0X84;
		  while(1)
          {
 	        uchar i,j;
  //          DELAY(100);
            SETUP_LCD();
	
			DIS(0xf0);		//full lcd
			DELAY(200);		//
        	DIS(0x00);		//clean lcd
        	DELAY(10);
           for(i=1;i<33;i=i+2){
               WRITE_DAT(i,0x80);
               DELAY(100);
            }

           for (i = 11;i < 15;i+=2){
		       WRITE_DAT(9,0x80);
				DELAY(200);
			}
            DELAY(200);
			DIS(0x00);
           j=0;
          for (i=0;i<16;i++){
				WRITE_DAT(j,TAB1[i]);
               	WRITE_DAT(j+1,TAB1[i]<<4);
               	j=j+2;
               	DELAY(100);
            }
            DELAY(200);DELAY(200);
 //           DIS(0x00);DELAY(200);
   //         DIS(0x10);DELAY(200);
     //       DIS(0x20);DELAY(200);
       //     DIS(0x40);DELAY(200);
 /* 
  			d[0] = 0;
  			d[1] = 1;
  			d[2] = 2;
  			d[3] = 3;
  			d[4] = 4;
  			d[5] = 5;
  			d[6] = 6;
  			d[7] = 7;
  			d[8] = 8;
			ShowLCD(3,2,1,1,1,null,1,5,&d[5],1);
			while(1);
*/   	       }
        }
/*
addr 1,3,5,7		is battery 1,2,3,外壳
addr 9				is 未接
addr 17				is 呼入
addr 11				is 呼出
addr 19				is : 
addr 23,25,27,29,31	is signal 4 3 2 1 天线
*/
void ShowLCD(uchar signal,uchar battery,bit clr,bit in,bit out,bit lose,bit sign,uchar addr,uchar *str,uchar unit){
uchar i;
	if (clr)
		DIS(0x00);				//clean lcd
	if (in)
		WRITE_DAT(17,0x80);		//show 呼入
	if (out)
		WRITE_DAT(11,0x80);		//show 呼出
	if (lose)
		WRITE_DAT( 9,0x80);		//show 未接
	if (sign)
		WRITE_DAT(19,0x80);		//show :
	
	if (signal > 4){
		signal = 0;
	}
		i = 29;
		WRITE_DAT(31,0x80); //clean l
	while (signal){
		WRITE_DAT(i,0x80); //clean l
		i -= 2; 
		signal--;
	}

	
	if (battery > 3)
		battery = 0;

		i = 1;
		WRITE_DAT(7,0x80);
	while (battery){
		WRITE_DAT(i,0x80); //clean l
		i += 2; 
		battery--;
	}


	addr *= 2;			//Show the nuber at the 0-0x0f
	while (unit){
		WRITE_DAT(addr,		TAB1[*str]);
       	WRITE_DAT(addr+1,	TAB1[*str] << 4);
       	addr += 2;
		str++;
		unit--;
//       	DELAY(100);
	}
}

⌨️ 快捷键说明

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