📄 lcd.c
字号:
#include"config.h"
#define WR 1<<8
#define RD 1<<9
#define CE 1<<10
#define IOCON (WR|RD|CE)
volatile uint8 LCDX,LCDY;
void delay(uint32 dly)
{
uint32 i;
while(--dly)
{for(i=0;i<5000;i++);
}
}
void checkbusy(void)
{
uint8 temp;
IO0DIR=0x700;
while(1)
{
IO0SET=CE;
IO0CLR=RD;
temp=IO0PIN;
IO0SET=RD;
if((temp&0x03)==0x03)break;
}
IO0DIR=0x7ff;
}
void wr_data(uint8 data1,uint8 data2,uint8 cmd,uint8 num)
{
uint8 temp;
temp=num;
if(temp==2)
{
checkbusy();
IO0CLR=CE;
IO0CLR=0xff;
IO0SET=data1;
IO0CLR=WR;
IO0SET=WR;
}
if(temp==2|temp==1)
{ checkbusy();
IO0CLR=CE;
IO0CLR=0xff;
IO0SET=data2;
IO0CLR=WR;
IO0SET=WR;
}
checkbusy();
IO0SET=CE;
IO0CLR=0xff;
IO0SET=cmd;
IO0CLR=WR;
IO0SET=WR;
}
void lcd_init(void)
{
PINSEL0=0x00000000;
IO0DIR=0x7ff;
IO0SET=0x7ff;
wr_data(0x00,0x00,0x42,2);
wr_data(0x20,0x00,0x43,2);
wr_data(0x00,0x00,0x80,0);
wr_data(0x00,0x00,0x98,0);
}
void xhanzi(uint8 x,uint8 y,uint8 code,uint8 kk,uint8 const *str)
{
uint16 i=0,j=0;
uint16 temp ;
uint8 addrh,addrl;
LCDX=x;
LCDY=y;
temp=(LCDX*32)+LCDY;
addrh=temp/256;
addrl=temp%256;
if(kk==0) {i=code*32;}
else {i=code*16;}
for(j=0;j<16;j++)
{
wr_data(addrl,addrh,0x24,2);
wr_data(0,str[i],0xC0,1);
i++;
if(kk==0)
{ wr_data(0,str[i],0xC0,1);
i++;
}
LCDX+=1;
temp=(LCDX*32)+LCDY;
addrh=temp/256;
addrl=temp%256;
}
}
void xinghao(void)
{
uint8 i=0;
for(i=0;i<20;i++)
{
xhanzi(17,i,0,1,TESHU);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -