欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
st7920控制的LCD12864打點法顯示漢字
[打印本頁]
作者:
雪山鳳凰
時間:
2020-6-2 18:24
標題:
st7920控制的LCD12864打點法顯示漢字
請教各位大神,最近在玩st7920控制的LCD12864這個屏,有一些疑問,希望大神們帶帶小白:
用打點法顯示自己想要的漢字,具體是怎么實現的啊?比如說,我現在可以任意位置打一個點了,然后我怎么實現我想要的漢字呢?
作者:
xxpp2011
時間:
2020-6-2 21:04
用數組存該漢字的字模,然后將數組元素逐位放進顯示點的函數里。
作者:
man1234567
時間:
2020-6-2 21:59
讀取點陣漢字的點信息用打點法顯示出來
作者:
dong咚咚
時間:
2020-6-2 23:58
有生成子模的軟件
作者:
雪山鳳凰
時間:
2020-6-3 08:54
網上多是單純的打點函數,發布者默認,看懂打點函數就會其他,例如漢字,圖片,直線,圓,因為點是一切的基本單位,但問題是,總得有個顯示的函數通過調用這個打點函數,把要顯示的東西聯系起來吧,例如,現在想在任意位置顯示一個12*12的自定義漢字,用取模軟件橫向取出字模數組,接下來用什么顯示函數(for循環什么的),調用打點函數,把這個字模打點出來,我問的是這個連接函數
作者:
雪山鳳凰
時間:
2020-6-3 09:44
xxpp2011 發表于 2020-6-2 21:04
用數組存該漢字的字模,然后將數組元素逐位放進顯示點的函數里。
感謝回答:比如我要畫這個字,字模出來了
/*-- 文字: 我 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x04,0x40,0x0E,0x50,0x78,0x48,0x08,0x48,0x08,0x40,0xFF,0xFE,0x08,0x40,0x08,0x44,
0x0A,0x44,0x0C,0x48,0x18,0x30,0x68,0x22,0x08,0x52,0x08,0x8A,0x2B,0x06,0x10,0x02,
怎么將這些數組元素和這個uchar DrawDots(uchar x,uchar y,ucharcolor)//打點函數,聯系起來呢
作者:
robinsonlin
時間:
2020-6-3 17:02
字模的取模方試,行列還是列行?取模走向,高位在前,還是低位在前? 陰碼還是陽碼? uchar DrawDots(uchar x,uchar y, ucharcolor)的源代碼呢?
作者:
雪山鳳凰
時間:
2020-6-4 15:19
大概的通過查資料,也明白一些,LCD12864就是8192個像素點,1就是點亮,0就是熄滅。比如想顯示一個12*12的漢字,先取模,得到字模,然后應該有個函數把這些字模數組和打點函數聯系起來,網上多是單純的打點函數,比較經典的是這個了:
bit lcd_busy() // 讀寫判斷數據的D7讀寫位,用于判斷1602是否忙
{
bitresult;
D7 =1; //數據口D7置1,為讀狀態做準備
LCD_RS = 0; // 選擇指令寄存
LCD_RW = 1; // 選擇讀控制線
LCD_EN = 1; // 開使能控制線
delayNOP(); // 時序延時
result = D7; // 讀D7的電平
LCD_EN = 0; // 關使能
return(result); // 返回值1:忙,0可以執行操作
}
unsigned charreadData(void) //讀取數據函數
{
uchar i;
D0 = 1; D1 = 1; D2 = 1; D3 = 1;
D4 = 1; D5 = 1; D6 = 1; D7 = 1;
lcd_busy();
LCD_RS=1; LCD_RW=1;
LCD_EN=0; LCD_EN=1;
B_0=D0;B_1=D1; B_2=D2; B_3=D3;//B_1=B^1,在程序前段有位定義
B_4=D4;B_5=D5; B_6=D6;B_7=D7;
for(i=1;i<=7;i++)
delayNOP();//這個函數是{_nop_();_nop_();_nop_();_nop_();};
LCD_EN=0;
returnB;
}
uchar DrawDots(uchar x,uchar y,ucharcolor)//打點函數
{
ucharrow,xlabel,xlabel_bit;
uchar Read_H=0,Read_L=0;
lcd_wcmd(0x34); //擴充指令
lcd_wcmd(0x36); //繪圖指令
xlabel=x>>4; //去16*16首地址
xlabel_bit=x & 0x0F;
if(y<32) row=y;
else
{
row=y-32;
xlabel+=8;
}
lcd_wcmd(row+0x80);
lcd_wcmd(xlabel+0x80);
readData();
Read_H=readData();
Read_L=readData();
lcd_wcmd(row+0x80);
lcd_wcmd(xlabel+0x80);
if(xlabel_bit<8)
{
switch(color)
{
case 0:Read_H&=(~(0x01<<(7-xlabel_bit))); break; //變暗,看不見
case 1:Read_H |=(0x01<<(7-xlabel_bit));break; //變亮 ,看得見
case 2:Read_H ^=(0x01<<(7-xlabel_bit));break; //反轉
default:break;
}
lcd_wdat(Read_H);
lcd_wdat(Read_L);
}
else
{
switch(color)
{
case 0:Read_L&=(~(0x01<<(15-xlabel_bit))); break; //變暗 ,看不見
case 1:Read_L |=(0x01<<(15-xlabel_bit));break; //變亮 ,看得見
case 2:Read_L ^=(0x01<<(15-xlabel_bit));break; //反轉
default:break;
}
lcd_wdat(Read_H);
lcd_wdat(Read_L);
}
lcd_wcmd(0x30);//恢復正常模式
}
如果你的單片機和12864接口不是亂的,那可以這樣寫讀取函數
unsigned charreadData(void)
{
uchar i ,data;
P0=0xFF;
lcd_busy();
LCD_RS=1; LCD_RW=1;//
LCD_EN=0; LCD_EN=1;
data=P0;
for(i=1;i<=7;i++)
delayNOP();
LCD_EN=0;
returndata;
}
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1