本帖最后由 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);
- }
复制代码
|