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 + -
显示快捷键?