亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機驅動不帶字庫的液晶12864顯示源程序(有詳細注釋)
[打印本頁]
作者:
789add
時間:
2018-11-6 22:50
標題:
單片機驅動不帶字庫的液晶12864顯示源程序(有詳細注釋)
#include <REG52.H>
#define uint unsigned int
#define uchar unsigned char
delay(uint i){ while(i--);}
//12864引腳定義
#define lcdDat P0 /* LCD12864 數據線 */
sbit cs1= P2^3; /* 右屏片選,高電平有效 */
sbit cs2= P2^4; /* 左屏片選,高電平有效 */
sbit en = P2^0; /* 讀,寫使能,高電平有效,下沿鎖定數據 */
sbit rw = P2^1; /* 1讀\0寫 */
sbit rs = P2^2; /* 1數據\0指令 */
/** LCM忙檢測 **/
busy12864(){
lcdDat=0xff; //口線置1,防止干擾
rs=0; rw=1; //置“命令、讀”模式
//en=1; while(lcdDat&0x80); en=0;//忙等待
}
/** 寫命令 參數:comDat為要發送的命令 **/
WriteCom(uchar comDat){
busy12864(); //忙,則等待
rs=0;rw=0; //置“命令、寫”模式
lcdDat=comDat;en=1;en=0;//送出命令,并使之有效
}
/** 寫數據 參數:dat為要發送的數據 **/
WriteDat(uchar dat){
busy12864(); //忙,則等待
rs=1;rw=0; //置“數據、寫”模式
lcdDat=dat;en=1;en=0; //送出數據,并使之有效
}
//清屏函數
void clrLCD(){
uchar i,j;
cs1=cs2=1; //同時選中左右屏
for(i=0;i<8;i++){ //共8頁
WriteCom(0xB8+i); //光標到i頁
WriteCom(0x40); //光標到頁首
for(j=0;j<64;j++)WriteDat(0); //寫0清屏
}
}
/** 初始化12864 **/
Init12864(){
lcdDat=0xff; //口線置1,防止干擾
rs=0; rw=1; //置“命令、讀”模式
//en=1; while(lcdDat&0x10); en=0;//等待復位完成
WriteCom(0x3f); //開顯示
WriteCom(0xc0); //設置顯示起始行
clrLCD(); //清屏
}
uchar code zm8x16_index[]="ABC"; //索引字串
uchar code zm8x16_Table[][16]={ //字串字模
0xE0,0xF0,0x98,0x8C,0x98,0xF0,0xE0,0,15,15,0x0,0,0,15,15,0,//A
0x04,0xFC,0xFC,0x44,0x44,0xFC,0xB8,0, 8,15,0xF,8,8,15, 7,0,//B
0xF0,0xF8,0x0C,0x04,0x04,0x0C,0x18,0,0x03,7,0xC,8,8,12,6,0 //C
};
uchar code zm16x16_index[]="您好";//字串索引
uchar code zm16x16_Table[][32]={ //字串字模
0x40,32,16,0xFC,0x23,16,0x8C,0x67,4,0xF4,4,0x44,0x94,0x8C,0,0,//您
64,48,0,0x77,0x80,0x81,0x88,0x92,0xB4,0x83,128,0xE0,0,17,96,0,
16,16,15,31,16,0xF0,128,130,130,130,0xE2,0x92,0x8A,0xC6,128,0,//好
0x40,0x22,0x15,0x08,0x14,0x63,0,0,0x40,0x80,0x7F,0x00,0,0,0,0
};
/******** 任意尺寸點陣顯示函數 ***********|
|參數:顯示位置:row頁數,col列號, |
| 字符大小:x橫向像素,y縱向頁數 |
| 顯示內容:tab字模表 ******/
showXY(uchar row,uchar col,uchar x,uchar y,uchar *tab){
uchar i,j;
bit right;
if(col<64){right=0;} //置左右屏標志
else {col-=64;right=1;}
for(i=0;i<y;i++){
if(right)cs1=0,cs2=1;
else cs1=1,cs2=0;
WriteCom(0xb8+row+i); //行
WriteCom(0x40+col); //列
for(j=0;j<x;j++){
if(col+j<64)WriteDat(tab[i*x+j]); //未跨屏
else if(right==0){ //從左屏跨右屏
cs1=0,cs2=1; //選中右屏
WriteCom(0xb8+row+i); //設置行
WriteCom(0x40+(col+j-64));
WriteDat(tab[i*x+j]);
} //在右屏越界不顯示
}
}
}
/* 返回一個8*16字符索引位置 */
uchar enN(uchar *s){
uchar i;
for(i=0;zm8x16_index[i]!=0;i++)if(zm8x16_index[i]==s[0])break;
return i;
}
/* 返回一個16*16字符索引位置 */
uchar cnN(uchar *s){
uchar i;
for(i=0;zm16x16_index[i]!=0;i+=2)
if(zm16x16_index[i]==*s&&zm16x16_index[i+1]==*(s+1))break ;
return i/2;
}
/* 顯示字符串 */
void showStr(uchar row,uchar col,uchar *s){
uchar i;
for(i=0;s[i]!=0;i++){
if(s[i]<0x80){ //英文
showXY(row,col,8,2,zm8x16_Table[enN(&s[i])]);
col+=8;
}else{
showXY(row,col,16,2,zm16x16_Table[cnN(&s[i])]);
col+=16;i+=1;
}
if(col>120){ //換行處理
col=0;
row+=2;
}
}
}
void main(){
Init12864(); //初始化
showStr(0,0,"您好好ABC好");
while(1);
}
復制代碼
作者:
wxyz
時間:
2018-11-7 09:11
謝謝樓主分享的液晶12864顯示源程序!
作者:
這一生只為你
時間:
2018-11-7 11:18
請問這個屏是什么驅動芯片?是KS0108驅動的么?
作者:
wf_style
時間:
2018-12-23 09:36
你好,請問
0x40,32,16,0xFC,0x23,16,0x8C,0x67,4,0xF4,4,0x44,0x94,0x8C,0,0,//您
64,48,0,0x77,0x80,0x81,0x88,0x92,0xB4,0x83,128,0xE0,0,17,96,0,
這些數據是怎么取得的,我用的那個取模軟件取出的不能正常顯示
作者:
wf_style
時間:
2018-12-24 15:18
已解決,謝謝你的源碼
作者:
yf158288464
時間:
2019-6-9 11:27
正好在學習液晶顯示,學習下
作者:
zouminglu
時間:
2019-12-3 09:42
謝謝分享!
作者:
程序猿禿
時間:
2020-1-13 21:51
你好,請問
0x40,32,16,0xFC,0x23,16,0x8C,0x67,4,0xF4,4,0x44,0x94,0x8C,0,0,//您
64,48,0,0x77,0x80,0x81,0x88,0x92,0xB4,0x83,128,0xE0,0,17,96,0,
這些數據是怎么取得的,我用的那個取模軟件取出的也不能正常顯示
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1