欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8992|回復(fù): 7
收起左側(cè)

單片機(jī)驅(qū)動不帶字庫的液晶12864顯示源程序(有詳細(xì)注釋)

[復(fù)制鏈接]
ID:422071 發(fā)表于 2018-11-6 22:50 | 顯示全部樓層 |閱讀模式
  1. #include <REG52.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. delay(uint i){ while(i--);}
  5. //12864引腳定義
  6. #define lcdDat P0  /* LCD12864 數(shù)據(jù)線 */
  7. sbit cs1= P2^3;    /* 右屏片選,高電平有效 */
  8. sbit cs2= P2^4;    /* 左屏片選,高電平有效 */
  9. sbit en = P2^0;    /* 讀,寫使能,高電平有效,下沿鎖定數(shù)據(jù) */
  10. sbit rw = P2^1;    /* 1讀\0寫 */
  11. sbit rs = P2^2;    /* 1數(shù)據(jù)\0指令 */
  12. /** LCM忙檢測 **/
  13. busy12864(){
  14. lcdDat=0xff;    //口線置1,防止干擾
  15. rs=0; rw=1;    //置“命令、讀”模式
  16. //en=1; while(lcdDat&0x80); en=0;//忙等待
  17. }
  18. /** 寫命令 參數(shù):comDat為要發(fā)送的命令 **/
  19. WriteCom(uchar comDat){  
  20.     busy12864();       //忙,則等待
  21. rs=0;rw=0;    //置“命令、寫”模式
  22.     lcdDat=comDat;en=1;en=0;//送出命令,并使之有效
  23. }
  24. /** 寫數(shù)據(jù) 參數(shù):dat為要發(fā)送的數(shù)據(jù) **/
  25. WriteDat(uchar dat){  
  26.     busy12864();      //忙,則等待
  27. rs=1;rw=0;      //置“數(shù)據(jù)、寫”模式
  28.     lcdDat=dat;en=1;en=0; //送出數(shù)據(jù),并使之有效
  29. }
  30. //清屏函數(shù)
  31. void clrLCD(){
  32. uchar i,j;
  33. cs1=cs2=1;      //同時選中左右屏
  34. for(i=0;i<8;i++){    //共8頁
  35.   WriteCom(0xB8+i);  //光標(biāo)到i頁
  36.   WriteCom(0x40);    //光標(biāo)到頁首
  37.   for(j=0;j<64;j++)WriteDat(0); //寫0清屏
  38. }
  39. }
  40. /** 初始化12864 **/
  41. Init12864(){
  42. lcdDat=0xff;   //口線置1,防止干擾
  43. rs=0; rw=1;    //置“命令、讀”模式
  44. //en=1; while(lcdDat&0x10); en=0;//等待復(fù)位完成
  45. WriteCom(0x3f);   //開顯示
  46. WriteCom(0xc0);   //設(shè)置顯示起始行
  47. clrLCD();    //清屏
  48. }
  49. uchar code zm8x16_index[]="ABC"; //索引字串
  50. uchar code zm8x16_Table[][16]={  //字串字模
  51. 0xE0,0xF0,0x98,0x8C,0x98,0xF0,0xE0,0,15,15,0x0,0,0,15,15,0,//A
  52. 0x04,0xFC,0xFC,0x44,0x44,0xFC,0xB8,0, 8,15,0xF,8,8,15, 7,0,//B
  53. 0xF0,0xF8,0x0C,0x04,0x04,0x0C,0x18,0,0x03,7,0xC,8,8,12,6,0 //C
  54. };
  55. uchar code zm16x16_index[]="您好";//字串索引
  56. uchar code zm16x16_Table[][32]={  //字串字模
  57. 0x40,32,16,0xFC,0x23,16,0x8C,0x67,4,0xF4,4,0x44,0x94,0x8C,0,0,//您
  58. 64,48,0,0x77,0x80,0x81,0x88,0x92,0xB4,0x83,128,0xE0,0,17,96,0,
  59. 16,16,15,31,16,0xF0,128,130,130,130,0xE2,0x92,0x8A,0xC6,128,0,//好
  60. 0x40,0x22,0x15,0x08,0x14,0x63,0,0,0x40,0x80,0x7F,0x00,0,0,0,0
  61. };
  62. /******** 任意尺寸點陣顯示函數(shù) ***********|
  63. |參數(shù):顯示位置:row頁數(shù),col列號,    |
  64. |    字符大小:x橫向像素,y縱向頁數(shù)   |
  65. |    顯示內(nèi)容:tab字模表          ******/
  66. showXY(uchar row,uchar col,uchar x,uchar y,uchar *tab){
  67. uchar i,j;
  68. bit right;
  69. if(col<64){right=0;} //置左右屏標(biāo)志
  70. else {col-=64;right=1;}
  71. for(i=0;i<y;i++){
  72.   if(right)cs1=0,cs2=1;
  73.   else  cs1=1,cs2=0;
  74.   WriteCom(0xb8+row+i); //行
  75.   WriteCom(0x40+col);   //列
  76.   for(j=0;j<x;j++){
  77.    if(col+j<64)WriteDat(tab[i*x+j]); //未跨屏
  78.    else if(right==0){    //從左屏跨右屏
  79.      cs1=0,cs2=1;    //選中右屏
  80.      WriteCom(0xb8+row+i);    //設(shè)置行
  81.      WriteCom(0x40+(col+j-64));
  82.      WriteDat(tab[i*x+j]);
  83.    }       //在右屏越界不顯示
  84.   }
  85. }
  86. }
  87. /* 返回一個8*16字符索引位置 */     
  88. uchar enN(uchar *s){
  89. uchar i;
  90. for(i=0;zm8x16_index[i]!=0;i++)if(zm8x16_index[i]==s[0])break;
  91. return i;
  92. }
  93. /* 返回一個16*16字符索引位置 */
  94. uchar cnN(uchar *s){
  95. uchar i;
  96. for(i=0;zm16x16_index[i]!=0;i+=2)
  97.   if(zm16x16_index[i]==*s&&zm16x16_index[i+1]==*(s+1))break ;
  98. return i/2;
  99. }
  100. /* 顯示字符串 */
  101. void showStr(uchar row,uchar col,uchar *s){
  102.   uchar i;
  103.   for(i=0;s[i]!=0;i++){
  104.    if(s[i]<0x80){  //英文
  105.    showXY(row,col,8,2,zm8x16_Table[enN(&s[i])]);
  106.    col+=8;
  107.   }else{   
  108.    showXY(row,col,16,2,zm16x16_Table[cnN(&s[i])]);
  109.    col+=16;i+=1;  
  110.   }
  111.   if(col>120){  //換行處理
  112.    col=0;
  113.    row+=2;
  114.   }
  115.   }
  116. }
  117. void main(){
  118. Init12864();    //初始化
  119. showStr(0,0,"您好好ABC好");
  120. while(1);
  121. }
復(fù)制代碼
回復(fù)

使用道具 舉報

ID:199427 發(fā)表于 2018-11-7 09:11 | 顯示全部樓層
謝謝樓主分享的液晶12864顯示源程序!
回復(fù)

使用道具 舉報

ID:403593 發(fā)表于 2018-11-7 11:18 | 顯示全部樓層
請問這個屏是什么驅(qū)動芯片?是KS0108驅(qū)動的么?
回復(fù)

使用道具 舉報

ID:285143 發(fā)表于 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,

這些數(shù)據(jù)是怎么取得的,我用的那個取模軟件取出的不能正常顯示
回復(fù)

使用道具 舉報

ID:285143 發(fā)表于 2018-12-24 15:18 來自觸屏版 | 顯示全部樓層
已解決,謝謝你的源碼
回復(fù)

使用道具 舉報

ID:541690 發(fā)表于 2019-6-9 11:27 | 顯示全部樓層
正好在學(xué)習(xí)液晶顯示,學(xué)習(xí)下
回復(fù)

使用道具 舉報

ID:114701 發(fā)表于 2019-12-3 09:42 來自觸屏版 | 顯示全部樓層
謝謝分享!
回復(fù)

使用道具 舉報

ID:685851 發(fā)表于 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,

這些數(shù)據(jù)是怎么取得的,我用的那個取模軟件取出的也不能正常顯示
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表