本帖最后由 yekai_yh 于 2018-9-20 19:39 編輯
單片機入門新手,最近在學習制作菜單,遇到反白問題,在網上搜 了個反白函數,看不明白函數怎么用,convertChar (uchar CX, CY, width,YN,f),其中YN和f參數有什么作用,還有就是這個不能正常反白,請高手指點下,這個的效果是比如我要反白第一行,結果是第一行從上部分到下部分逐步反白,而且保持不了,一直流動反白。具體程序如下,沒有引用別的頭文件。
函數如下:
- void Disp_black() //在反白之前先清繪圖存儲區,將繪圖存儲區的參數全設為不反白0x00.
- {
- unsigned char i,j;
- lcd_w_com(0x36); //圖形方式
- for(i=0;i<32;i++)
- {
- lcd_w_com(0x80+i);
- lcd_w_com(0x80);
- for(j=0;j<16;j++)
- {
- lcd_w_data(0x00);
- }
- }
- for(i=0;i<32;i++)
- {
- lcd_w_com(0x80+i);
- lcd_w_com(0x88);
- for(j=0;j<16;j++)
- {
- lcd_w_data(0x00);
- }
- }
- }
- void convertChar (uchar CX, CY, width,YN,f)
- {
- unsigned char halfLineCnt, basicBlock,lcdPosX,lcdPosY;
- if(f==1)
- Disp_black(); //清繪圖區
- lcdPosY = 0x80;
- if (CX == 0)
- {
- CX = 0x80;
- halfLineCnt = 16;
- }
- else if (CX == 1)
- {
- CX = 0x80;
- halfLineCnt = 32;
- }
- else if (CX == 2)
- {
- CX = 0x88;
- halfLineCnt = 16;
- }
- else if (CX == 3)
- {
- CX = 0x88;
- halfLineCnt = 32;
- }
- lcdPosX = CX + CY;
- for (; halfLineCnt != 0; halfLineCnt--)
- {
- basicBlock = width;
- lcd_w_com(0x34);
- lcd_w_com(lcdPosY);
- lcd_w_com(lcdPosX);
- lcd_w_com(0x30);
- for (;basicBlock != 0; basicBlock--)
- {
- if (halfLineCnt > 16)
- {
- lcd_w_data(0x00);
- }
- else
- {
- if(YN==1) lcd_w_data(0xff);
- else lcd_w_data(0x00);
- }
- }
- lcdPosY++;
- }
- lcd_w_com(0x36);
- lcd_w_com(0x30);
- }
復制代碼
|