我尝试着让LCD显示一个字符。然后我的程序可以清屏,但不能显示出字符。下面是代码
int main(void)
{
delay_init(168); //延时初始化
Lcd_Init_My(); //液晶初始化
ClearLcd(); //清屏1,这个是从坐标0,0开始的,并显示白 {MOD}
ClearLcd2(); //清屏2,这个是从坐标100,100开始的并显示红 {MOD},但结果屏幕全是红的
LCD_ShowChar(30,40,'I',16,0);//显示字符
LCD_ShowChar(30,70,'L',16,0);
LCD_ShowChar(30,90,'o',16,0);
LCD_ShowChar(30,110,'v',16,0);
LCD_ShowChar(30,130,'e',16,0);
while(1);
}
void ClearLcd()
{
int i;
LCD_SetCursor(0,0);
LCD_WriteRAM_Prepare();
for(i=0;i<xlen*ylen;i++) //xlen和ylen是长宽
LCD->LCD_RAM=White;
}
void ClearLcd2() //之所以设置2个清屏函数是想验证坐标有没有影响。但结果都是全屏幕变 {MOD},所以觉得坐标设置不出来
{
int i;
LCD_SetCursor(100,100);
LCD_WriteRAM_Prepare();
for(i=0;i<xlen*ylen;i++)
LCD->LCD_RAM=Red;
}
void LCD_SetCursor(u16 Xpos, u16 Ypos) //设置坐标的函数
{
LCD_WR_REG(0x2A00);
LCD_WR_DATA(Xpos>>8); //我的LCD是5510,这是原子哥上的坐标设置,但我觉得我坐标设置不出来,不知道哪里有问题
LCD_WR_REG(0x2A00+1);
LCD_WR_DATA(Xpos&0XFF);
LCD_WR_REG(0x2B00);
LCD_WR_DATA(Ypos>>8);
LCD_WR_REG(0x2B00+1);
LCD_WR_DATA(Ypos&0XFF);
}
void LCD_WriteRAM_Prepare(void) //准备写GRAM,5510的命令是0X2C00
{
LCD->LCD_REG=0X2C00;
}
因为我的LCD可以在屏幕上显示红 {MOD},这说明初始化和写寄存器,写数据没有问题,代码就不贴了,要是需要我在贴。请假一下大家这是啥问题
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{
u8 temp,t1,t;
u16 y0=y;
u8 csize=(size/8+((size%8)?1:0))*(size/2); //μÃμ½×Öìåò»¸ö×Ö·û¶Ôó|μãÕó¼ˉËùÕ¼μÄ×Ö½úêy
num=num-' ';//μÃμ½Æ«òÆoóμÄÖ죨ASCII×Ö¿aêÇ′ó¿Õ¸ñ¿aê¼è¡Ä££¬ËùòÔ-' '¾íêǶÔó|×Ö·ûμÄ×Ö¿a£©
for(t=0;t<csize;t++)
{
if(size==12)temp=asc2_1206[num][t]; //μ÷óÃ1206×Öìå
else if(size==16)temp=asc2_1608[num][t]; //μ÷óÃ1608×Öìå
else if(size==24)temp=asc2_2412[num][t]; //μ÷óÃ2412×Öìå
else return; //ûóDμÄ×Ö¿a
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_DrawPoint(x,y,Red);
else if(mode==0)LCD_DrawPoint(x,y,Blue);
temp<<=1;
y++;
if(y>=ylen)return; //3¬ÇøóòáË
if((y-y0)==size)
{
y=y0;
x++;
if(x>=xlen)return; //3¬ÇøóòáË
break;
}
}
}
}
一周热门 更多>