一个LCD的程序,哪位帮忙看看
这是我的一个课程设计,题目其实不难,从串口接受数据然后再LCD上显示出来,要有游动效果
主函数:
int main(void){ // 初始化I/O uint16 chr,str[100],color; uint8 fs,i = 0; int coor; rGPHCON = (rGPHCON & (~(0x03<<20))) | (0x01<<20); // rGPHCON[21:20] = 01b,设置GPH10为GPIO输出模式 UART_Select(0); // 选择UART0 UART_Init(); // 初始化UART0 RTC_Init(0); // 初始化RTC GUI_Initialize();//初始化LCD RunBeep(); UART_SendStr("请选择滚动方式,0为横向滚动,1为纵向滚动\n"); chr = UART_GetKey(); if(chr == 0) { fs = 1; coor = WIDTH; } else { fs = 0; coor = HIGN; }//格式控制,fs为0时横向滚动,fs为1时纵向滚动 UART_SendStr("请选择文字颜色: \n0 黑色\n1 深蓝色\n2 深绿色\n3 深青色\n4 深红色:\n5 紫色\n6 橄榄绿\n7 灰白色\n8 深灰色\n9 蓝色\n10 绿色\n11 青色\n12 红色\n13 品红\n14 黄色\n15 白色"); chr = UART_GetKey(); color = COLORS_TAB[chr];//选择颜色 while(str[i-1] != 0x0D) { str[i] = UART_GetKey(); //获得串口数据 i++; } str[i] = ' '; str[i++] = '2'; str[i++] = '0'; str[i++] = g_year/10; str[i++] = g_year%10; str[i++] = '-'; str[i++] = g_month/10; str[i++] = g_month%10; str[i++] = '-'; str[i++] = g_day/10; str[i++] = g_day%10; str[i++] = ' '; str[i++] = g_hour/10; str[i++] = g_hour%10; str[i++] = ':'; str[i++] = g_min/10; str[i++] = g_min%10; str[i++] = ':'; str[i++] = g_sec/10; str[i++] = g_sec%10; str[i] = '\0';//加入rtc while(1) { ShowChar(str,fs,coor,color);//显示串口获得的数据,这里有问题!,可以正常执行但是就是显示不出东西 TFT_FillSCR(GUI_CCOLOR);//清屏 coor-=GUNDONG; if(coor == -(16 * i) && fs == 0) coor = WIDTH; if(coor == -(16 * i) && fs == 1) coor = HIGN;//滚动结束,重新开始 DelayNS(10); } return(0);}
void ShowChar(uint16 *p,uint8 fs,uint16 i,uint8 color){ if(fs == 0) { Lcd_DspAscII8x16(i,0,color,p); } else { Lcd_DspAscII8x16(0,i,color,p); }}
void Lcd_DspAscII8x16(uint16 x0, uint16 y0, uint8 ForeColor, uint8 * s){ int16 i,j,k,x,y,xx; uint8 qm; uint32 ulOffset; int8 ywbuf[16],temp[2]; for( i = 0; i < strlen((const char*)s); i++ ) { if( (uint8)*(s+i) >= 161 ) { temp[0] = *(s + i); temp[1] = '\0'; return; } else { qm = *(s+i); ulOffset = (uint32)(qm) * 16; //Here to be changed tomorrow for( j = 0; j < 16; j ++ ) { ywbuf[j] = g_auc_Ascii8x16[ulOffset + j]; } for( y = 0; y < 16; y++ ) { for( x = 0; x < 8; x++ ) { k = x % 8; if( ywbuf[y] & (0x80 >> k) ) { xx = x0 + x + i*8; GUI_Point(xx, y + y0, (uint8)ForeColor); } } } } }}
[解决办法]
uping
[解决办法]
这个程序是显示不了年月日 时间的几个汉字 具体的你用什么液晶屏我还不知道 看情况是错误在 qm = *(s+i);
ulOffset = (uint32)(qm) * 16; //Here to be changed tomorrow
for( j = 0; j < 16; j ++ )
{
ywbuf[j] = g_auc_Ascii8x16[ulOffset + j];
}
for( y = 0; y < 16; y++ )
{
for( x = 0; x < 8; x++ )
{
k = x % 8;
if( ywbuf[y] & (0x80 >> k) )
{
xx = x0 + x + i*8;
GUI_Point(xx, y + y0, (uint8)ForeColor);
这块 内存的地址指针可能没有到位
[解决办法]
帮顶一下。
[解决办法]
UART_SendStr怎么和字符值联系起来呢?怎样读字库呢?
[解决办法]
void ShowChar(uint16 *p,uint8 fs,uint16 i,uint8 color)
{
if(fs == 0)
{
Lcd_DspAscII8x16(i,0,color,p);//void Lcd_DspAscII8x16(uint16 x0, uint16 y0, uint8 ForeColor, uint8 * s)
指针的类型也不一致啊,单步调试看看指针的值,还有字库是怎么弄得,用的现成的字库还是自己做的?看看指针指向的是什么数据,是不是要显示的字符