怀疑void LCD_SetCustomChar(char (*Table)[8])这个函数有问题,或许你根本没写入到CGRAM。。
你定义的Table[8][8]是二维数组,
LCD_WriteData(*(*(Table+i)+j));//读取的是1维数据?
不知有没有错。给你个代码参考测试一下:
- uchar code Word1[]={
- 0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,//一
- 0x00,0x0E,0x00,0x00,0x00,0x1F,0x00,0x00,//二
- 0x0E,0x00,0x00,0x0E,0x00,0x00,0x1F,0x00,//三
- 0x1F,0x11,0x15,0x15,0x1F,0x11,0x1F,0x00,//四
- 0x1E,0x08,0x08,0x1E,0x0A,0x0A,0x1F,0x00,//五
- 0x04,0x1F,0x00,0x0A,0x0A,0x0A,0x1B,0x00,//六
- 0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,//日
- 0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00,//月
- 0x08,0x1F,0x12,0x0F,0x0A,0x1F,0x02,0x00};//年
- void main()
- {
- uchar num;
- uchar j;//
- Lcd_1602_init();
-
- Lcd_1602_write(0,0x40); //操作CGRAM
- for (j=0;j<64;j++)
- Lcd_1602_write(1,Word1[j]); //连续写入64字节,8个字符, 5*7点阵按8*8计算
-
-
- while(1)
- {
-
-
- Lcd_1602_write(0,0x83); //指定显示地址,从第一行第3个字符开始
- for(num=3;num<16;num++)
- {
- Lcd_1602_write(1,table1[num]); //连续显示16个字符
- delay(3);
- }
- Lcd_1602_write(0,0xc0); //第2行第1个字符开始
- for(num=0;num<16;num++)
- {
- Lcd_1602_write(1,table2[num]);//显示另一组16个字符
- delay(3);
- }
-
- Lcd_1602_write(0,0x80); //指定显示位置
- for (j=0;j<8;j++)
- {
- Lcd_1602_write(1,j); //显示内存1个字符
- delay(100);
- }
- for (j=0;j<8;j++)
- {
- Lcd_1602_write(1,j); //显示内存1个字符
- delay(100);
- }
-
- Lcd_1602_write(0,0xc0); //指定显示位置
- for (j=0;j<8;j++)
- {
- Lcd_1602_write(1,7-j); //显示内存1个字符
- delay(100);
- }
- for (j=0;j<8;j++)
- {
- Lcd_1602_write(1,7-j); //显示内存1个字符
- delay(100);
- }
- delay(1000);
- Lcd_1602_write(0,0x01);
- delay(500);
- }
- }
复制代码
|