main.c

来自「写单片机液晶显示模块的很有用的资料」· C语言 代码 · 共 225 行

C
225
字号
#include  "config.h"
#define rd_enable 0x700
#define wr_enable 0x7ff
#define wr (1<<8)
#define rd (1<<9)
#define cd (1<<10)


uint8 zhong[]={0x01,0x00,0x01,0x00,0x21,0x08,0x3F,0xFC,
            0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,
            0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,
            0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
            };
uint8 wen[]={0x02,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,
             0x08,0x20,0x08,0x20,0x08,0x20,0x04,0x40,
             0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,
             0x04,0x60,0x18,0x1E,0xE0,0x08,0x00,0x00,
             };
uint8 xian[]={0x00,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,
              0x10,0x10,0x1F,0xF0,0x04,0x40,0x04,0x40,
              0x44,0x48,0x24,0x48,0x14,0x50,0x14,0x60,
              0x04,0x40,0xFF,0xFE,0x00,0x00,0x00,0x00,
             };
uint8 shi[]={0x00,0x00,0x1F,0xF8,0x00,0x00,0x00,0x00,
             0x00,0x00,0x7F,0xFE,0x01,0x00,0x01,0x00,
             0x11,0x20,0x11,0x10,0x21,0x08,0x41,0x0C,
             0x81,0x04,0x01,0x00,0x05,0x00,0x02,0x00,};
/****************************************************************************
* 名称:DelayNS()
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  delay(uint32  dly)
{  uint32  i;

   for(; dly>0; dly--) 
      for(i=0; i<500; i++);
}

__inline void enable_irq()
	{
	uint8 tmp;
	__asm
		{
		MRS tmp,CPSR
		BIC tmp,tmp,#0x80
		MSR CPSR_c,tmp
		}
	}

__inline void disable_irq()
	{
	uint8 tmp;
	__asm
		{
		MRS tmp,CPSR
		ORR tmp,tmp,#0x80
		MSR CPSR_c,tmp
		}
	}

__inline void enable_frq()
	{
	uint8 tmp;
	__asm
		{
		MRS tmp,CPSR
		BIC tmp,tmp,#0x40
		MSR CPSR_c,tmp
		}
	}

__inline void disable_frq()
	{
	uint8 tmp;
	__asm
		{
		MRS tmp,CPSR
		ORR tmp,tmp,#0x40
		MSR CPSR_c,tmp
		}
	}
	
char rd_state()
  {
   uint8 temp;
   IODIR=rd_enable;
   IOSET=cd;
   IOCLR=rd;
   temp=IOPIN;
   IOSET=rd;
   return temp;
   }
void rd_ok()
  {
   uint8 temp;
   temp=rd_state();
   while((temp&0x03)!=0x03)
     temp=rd_state();
   } 
void wr_cmd(uint8 data1,uint8 data2,uint8 cmd,uint8 num)   
  {
   uint8 temp;
   temp=num;
   if(temp==2)
     {
      rd_ok();
      IODIR=wr_enable;
      IOCLR=cd;
      IOCLR=0xff;
      IOSET=data1;
      IOCLR=wr;
      IOSET=wr;
      }
    if(temp==1||temp==2)
     {
      rd_ok();
      IODIR=wr_enable;
      IOCLR=cd;
      IOCLR=0xff;
      IOSET=data2;
      IOCLR=wr;
      IOSET=wr;
      }
    rd_ok();
    IODIR=wr_enable;
    IOSET=cd;
    IOCLR=0xff;
    IOSET=cmd;
    IOCLR=wr;
    IOSET=wr;
   } 
void write_data(uint8 data)
  {
   rd_ok();
   IODIR=wr_enable;
   IOCLR=cd;
   IOCLR=0xff;
   IOSET=data;
   IOCLR=wr;
   IOSET=wr;
   } 
   
void lcd_init()
  {
   IODIR=cd|wr|rd;
   IOSET=cd|wr|rd;
   wr_cmd(0x00,0x00,0x40,0x02);
   wr_cmd(0x1e,0x00,0x41,0x02);
   wr_cmd(0x00,0x00,0x42,0x02);
   wr_cmd(0x1e,0x00,0x43,0x02);
   wr_cmd(0x00,0x00,0xa3,0x00);
   wr_cmd(0x00,0x00,0x81,0x00);
   wr_cmd(0x00,0x00,0x9c,0x00);
   }  
void textout(uint8 * word,uint16 addr)
   {
    uint8 i;
    uint8 j;
    uint16 ad=addr;
    uint8 ad_l;
    uint8 ad_h;
     for(j=0;j<16;j++)
      {
       ad_l=ad;
       ad_h=ad>>8;
       wr_cmd(ad_l,ad_h,0x24,0x02);
       wr_cmd(0x00,0x00,0xb0,0x00);
       for(i=0;i<2;i++)
         {write_data(*word);
          word++;}
       wr_cmd(0x00,0x00,0xb2,0x00);
       ad=ad+30;
       //word++;
       }
    }
void window(uint16 addr)
  {
   uint8 ad_l;
   uint8 ad_h;
   uint8 i;
   uint8 j;
   uint16 ad;
   ad=addr;
   
   for(i=0;i<24;i++)
     {
      ad_l=ad;
      ad_h=ad>>8;
      wr_cmd(ad_l,ad_h,0x24,0x02);
      wr_cmd(0x00,0x00,0xb0,0x00);
      for(j=0;j<10;j++)
       {write_data(0xff);}
      wr_cmd(0x00,0x00,0xb2,0x00);
      ad=ad+30;
      }
   }
/****************************************************************************
* 名称:main()
* 功能:
****************************************************************************/
int  main(void)
   {
    PINSEL0=0x00000000;
    PINSEL1=0x00000000;
    lcd_init();
   
   
    textout(zhong,0x0610);
    textout(wen,0x0612);
    textout(xian,0x0614);
    textout(shi,0x0616);
    window(0x005e);
    wr_cmd(0x40,0x00,0x24,0x02);
    wr_cmd(0x00,'s'-0x20,0xc0,0x01);
    wr_cmd(0x00,'m'-0x20,0xc0,0x01);
    wr_cmd(0x00,'a'-0x20,0xc0,0x01);
    wr_cmd(0x00,'l'-0x20,0xc0,0x01);
    wr_cmd(0x00,'l'-0x20,0xc0,0x01);
    wr_cmd(0x00,'5'-0x20,0xc0,0x01);
    
    while(1);
	}

⌨️ 快捷键说明

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