久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 單片機(jī)+無字庫LCD12864顯示漢字 英文 變量程序Proteus仿真圖 [打印本頁]

作者: 陳潤源home    時間: 2022-7-11 00:42
標(biāo)題: 單片機(jī)+無字庫LCD12864顯示漢字 英文 變量程序Proteus仿真圖
LCD12864無字庫
論壇有很多相關(guān)的例程
本小白利用空余時間,按照自己的重新寫了一個小白都能看懂的驅(qū)動
大佬勿噴,僅供學(xué)習(xí)交流
下列是部分驅(qū)動程序靚照,請查閱
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include "12864.h"
  2. #include "ziku.h"

  3. void Delay_ms(unsigned int xms)  //@11.0592MHz
  4. {
  5.   unsigned int i,j;
  6.           for(i=xms;i>0;i--)   
  7.                 for(j=112;j>0;j--);  
  8. }

  9. static void LCD12864_Write(bit COM_Data,unsigned char  dat)  //12864操作函數(shù)
  10. {
  11.   LCD12864_RS=COM_Data;   //指令 0 數(shù)據(jù) 1
  12.         LCDData_Pro=dat;        //數(shù)據(jù)傳輸至P0扣
  13.         LCD12864_EN=1;          //置1
  14.         _nop_();
  15.         LCD12864_EN=0;          //置0   產(chǎn)生下降沿
  16. }

  17. void LCD12864_Init(void)   //12864初始化
  18. {
  19.         Delay_ms(300);   //等待系統(tǒng)上電穩(wěn)定
  20. /******************************************************************************/
  21.   LCD12864_EN=1;                       
  22.   LCD12864_RS=1;                       
  23.         LCD12864_CS1=1;  //仿真 0 實物 1   
  24.         LCD12864_CS2=1;  //仿真 0 實物 1   
  25.         Delay_ms(10);
  26. /******************************************************************************/
  27.         LCD12864_Write(LCD12864_COM,0x3f);   //開顯示
  28.         /*
  29.         LCD12864_Write(LCD12864_COM,0xc0);   //這段不寫也可以正常顯示
  30.         LCD12864_Write(LCD12864_COM,0xb8);
  31.         LCD12864_Write(LCD12864_COM,0x40);
  32.         */
  33.         LCD12864_Write(LCD12864_COM,0x30);   //打開基本指令
  34.         LCD_Clear();                         //清屏
  35. }
  36. /*****************************************************************************
  37. 函數(shù)功能:清平函數(shù)
  38. 入口參數(shù):空
  39. 說    明:清空整個屏幕數(shù)據(jù)
  40. 版    本:V1.0
  41. 時    間:2020年5月9日
  42. *****************************************************************************/
  43. void LCD_Clear(void)
  44. {
  45.         unsigned char  i,j;
  46. #if LCD_Mode
  47.   LCD12864_CS1=1;   //選中左半屏
  48.         LCD12864_CS2=1;   //選中右半屏
  49. #else
  50.   LCD12864_CS1=0;   //選中左半屏
  51.         LCD12864_CS2=0;   //選中右半屏
  52. #endif
  53.         LCD12864_Write(LCD12864_COM,0xc0);  //行
  54.   for(i=0;i<8;i++)
  55.         {
  56.           LCD12864_Write(LCD12864_COM,0xb8+i); //頁
  57.                 for(j=0;j<64;j++)
  58.                 {
  59.                   LCD12864_Write(LCD12864_COM,0x40+j); //列
  60.                         LCD12864_Write(LCD12864_DATA,0x00);
  61.                         Delay_ms(5);    //方便看清屏效果
  62.                 }
  63.         }
  64. }
  65. /*****************************************************************************
  66. 函數(shù)功能:地址寫入函數(shù)
  67. 入口參數(shù):X,Y
  68. 說    明:根據(jù)地址自動切換左、右屏
  69. 版    本:V1.0
  70. 時    間:2020年5月9日
  71. *****************************************************************************/
  72. void LCD12864_X_Y(unsigned char X,unsigned char Y)
  73. {
  74.   Y=Y&0x7f;   //限定范圍,列不能超過127     
  75.         X=X&0x07;          //限定范圍,行不能超過7
  76.         if(Y<64)
  77.         {
  78. #if LCD_Mode
  79.                  LCD12864_CS1=1;   //選中左半屏
  80.                  LCD12864_CS2=0;         //關(guān)閉右半屏
  81. #else
  82.                  LCD12864_CS1=0;   //選中左半屏
  83.                  LCD12864_CS2=1;         //關(guān)閉右半屏
  84. #endif
  85.                  LCD12864_Write(LCD12864_COM,0x40+Y);  //選擇列基地址+Y 一共64行
  86.                  if(Y==63) Y=64;
  87.         }
  88.         else
  89.         {
  90. #if LCD_Mode
  91.           LCD12864_CS1=0;   //關(guān)閉左半屏
  92.                 LCD12864_CS2=1;          //選中右半屏
  93. #else
  94.     LCD12864_CS1=1;   //關(guān)閉左半屏
  95.                 LCD12864_CS2=0;          //選中右半屏
  96. #endif
  97.                 Y&=0x3f;
  98.           LCD12864_Write(LCD12864_COM,0x40+Y);  //選擇列基地址+Y   一共64列
  99.         }
  100.           LCD12864_Write(LCD12864_COM,0xb8+X);  //選擇頁基地址+X   一共7頁  
  101. }
  102. /*****************************************************************************
  103. 函數(shù)功能:6*16數(shù)值寫入函數(shù)
  104. 入口參數(shù):X,Y,num,*dat
  105. 說    明:X_橫坐標(biāo) Y_縱坐標(biāo) num_數(shù)組的第num個數(shù) *day_需要顯示的數(shù)組
  106. 版    本:V1.5
  107. 修改時間:2022年7月10日
  108. 新    增:可實現(xiàn)跨左右屏
  109. *****************************************************************************/
  110. void LCD12864_Write_Number(unsigned char X,unsigned char Y,unsigned char num,unsigned char *dat)
  111. {
  112.         unsigned char  i;
  113.   for(i=0;i<6;i++)               
  114.         {
  115.           LCD12864_X_Y(X,Y+i);                          //每寫一個字節(jié) 更新一次Y 防止不能出現(xiàn)跨屏
  116.                 LCD12864_Write(LCD12864_DATA,dat[num*12+i]);  //寫上半字 共寫6個字節(jié)
  117.         }
  118.   for(i=0;i<6;i++)
  119.         {
  120.           LCD12864_X_Y(X+1,Y+i);                         //同上
  121.                 LCD12864_Write(LCD12864_DATA,dat[num*12+6+i]); //寫下半字 共寫6個字節(jié)
  122.         }
  123. }
  124. /*****************************************************************************
  125. 函數(shù)功能:變量顯示函數(shù)
  126. 入口參數(shù):X,Y,num,len
  127. 說    明:在第X行的第Y個位置顯示len個num數(shù)值
  128. 版    本:V1.2
  129. 修改時間:2022年7月10日
  130. 新    增:自動計算變量長度 最大計數(shù)99999
  131. *****************************************************************************/
  132. void LCD12864_Num(unsigned char X,unsigned char Y,unsigned int num)
  133. {
  134.         unsigned char i;
  135.   unsigned char Len;        
  136.   unsigned char Dis[5];
  137.         unsigned char Buf[5];
  138.         
  139.         sprintf(Buf,"%d",num);   //將數(shù)值轉(zhuǎn)換成字符串
  140.         Len=strlen(Buf);         //計算字符串長度
  141.         
  142.   if(Len>4)Dis[Len-5]=num/10000     ;    //若數(shù)據(jù)更大 按照規(guī)律寫即可
  143.   if(Len>3)Dis[Len-4]=num%10000/1000;
  144.   if(Len>2)Dis[Len-3]=num%1000/100  ;
  145.   if(Len>1)Dis[Len-2]=num%100/10    ;
  146.   if(Len>0)Dis[Len-1]=num%10        ;
  147.         
  148.   for(i=0;i<Len;i++) LCD12864_Write_Number(X,Y+(i*6),Dis[i],Num);
  149. }

  150. /*****************************************************************************
  151. 函數(shù)功能:12*16漢字寫入函數(shù)
  152. 入口參數(shù):X,Y,num,*dat
  153. 說    明:X_橫坐標(biāo) Y_縱坐標(biāo) num_數(shù)組的第num個數(shù) *day_需要顯示的數(shù)組
  154. 版    本:V1.5
  155. 修改時間:2022年7月10日
  156. 新    增:左右跨屏
  157. *****************************************************************************/
  158. void LCD12864_Write_Chinese(unsigned char X,unsigned char Y,unsigned char num,unsigned char *dat)
  159. {
  160.         unsigned char  i;
  161.   for(i=0;i<12;i++)
  162.         {
  163.                 LCD12864_X_Y(X,Y+i);                         //跨屏重要函數(shù)  勿刪除
  164.                 LCD12864_Write(LCD12864_DATA,dat[num*24+i]); //寫上半字 共寫12個字節(jié)
  165.         }
  166.   for(i=0;i<12;i++)
  167.         {
  168.           LCD12864_X_Y(X+1,Y+i);                          //同上
  169.                 LCD12864_Write(LCD12864_DATA,dat[num*24+12+i]); //寫下半字 共寫12個字節(jié)
  170.         }
  171. }
  172. /*****************************************************************************
  173. 函數(shù)功能:英文字母顯示函數(shù)
  174. 入口參數(shù):X,Y,*dat
  175. 說    明:X_橫坐標(biāo) Y_縱坐標(biāo) *dat_需要顯示的英文字母
  176. 版    本:V1.0
  177. 修改時間:2022年7月10日
  178. 注    明:帶字庫索引功能
  179. *****************************************************************************/
  180. void LCD12864_Write_English(unsigned char X,unsigned char Y,unsigned char *dat)
  181. {
  182.         unsigned char i,j;
  183.         unsigned char Len;
  184.         
  185.         Len=strlen(dat);        //獲取數(shù)據(jù)長度
  186.                
  187.   for(j=0;j<Len;j++)      
  188.         {
  189.           for(i=0; ;i++)  if(English_Buf[i]==*dat) {dat++; break;}  //查找字庫索引列表
  190.           LCD12864_Write_Number(X,Y+(j*6),i,English);               //寫數(shù)據(jù)
  191. ……………………

  192. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

Keil代碼與Proteus8.8仿真下載:
12864驅(qū)動.7z (51.32 KB, 下載次數(shù): 233)


作者: aktuan007    時間: 2022-7-11 12:52
為什么沒有reg。h頭文件

作者: 陳潤源home    時間: 2022-7-11 13:35
aktuan007 發(fā)表于 2022-7-11 12:52
為什么沒有reg。h頭文件

因為 部分頭文件在 12864.h 中引用
作者: 陳潤源home    時間: 2022-7-11 14:12
本帖最后由 陳潤源home 于 2022-7-11 14:16 編輯

發(fā)現(xiàn)一個Bug
/*************************************
函數(shù)功能:變量顯示函數(shù)
入口參數(shù):X,Y,num
*************************************/
這個函數(shù)最大只能顯示32767
我暫時沒找到是什么問題  望各路大佬指導(dǎo)一下

先謝謝各位大佬了
作者: aktuan007    時間: 2022-7-12 22:22
陳潤源home 發(fā)表于 2022-7-11 13:35
因為 部分頭文件在 12864.h 中引用

謝謝
請教一下為啥我的編譯有錯誤啊
作者: 陳潤源home    時間: 2022-7-14 18:35
aktuan007 發(fā)表于 2022-7-12 22:22
謝謝
請教一下為啥我的編譯有錯誤啊

你下載附件
作者: 陳潤源home    時間: 2023-3-20 11:51
/*****************************************************************************
函數(shù)功能:獲取數(shù)值長度
入口參數(shù):num
說    明:獲取數(shù)值數(shù)據(jù)的長度
版    本:V1.0
修改時間:2023年3月20日
新    增:無
*****************************************************************************/
unsigned char Get_Num_Len(unsigned long num)
{
        unsigned int len = 0; //初始長度為0
        for(; num > 0; ++len) //判斷num是否大于0,否則長度+1
        num /= 10;            //使用除法進(jìn)行運(yùn)算,直到num小于1
        return len;           //返回長度的值
}
/*****************************************************************************
函數(shù)功能:變量顯示函數(shù)
入口參數(shù):X,Y,num,len
說    明:在第X行的第Y個位置顯示len個num數(shù)值
版    本:V1.2
修改時間:2022年7月10日
新    增:自動計算變量長度 最大計數(shù)99999
*****************************************************************************/
void LCD12864_Num(unsigned char X,unsigned char Y,unsigned long num)
{
        unsigned char i;
  unsigned char Len;       
  unsigned char Dis[5];
       
        Len=Get_Num_Len(num);
       
  if(Len>4)Dis[Len-5]=num/10000     ;    //若數(shù)據(jù)更大 按照規(guī)律寫即可
  if(Len>3)Dis[Len-4]=num%10000/1000;
  if(Len>2)Dis[Len-3]=num%1000/100  ;
  if(Len>1)Dis[Len-2]=num%100/10    ;
  if(Len>0)Dis[Len-1]=num%10        ;
       
  for(i=0;i<Len;i++) LCD12864_Write_Number(X,Y+(i*6),Dis[i],Num);
}

作者: shenqiwei    時間: 2023-3-21 03:16
模塊化編程,少了很多代碼!是故意還是忘記了?
大家都懂的.
作者: 陳潤源home    時間: 2023-5-12 11:54
shenqiwei 發(fā)表于 2023-3-21 03:16
模塊化編程,少了很多代碼!是故意還是忘記了?
大家都懂的.

我求求你下載附件后再來評論吧
作者: Q__Q    時間: 2023-5-13 11:04
謝謝樓主 我先收藏 慢慢來學(xué)習(xí)
作者: 1ZAQ    時間: 2024-4-24 09:39
謝謝樓主 我先收藏 慢慢來學(xué)習(xí)




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国内久久精品 | 亚洲欧美在线观看 | 激情久久网 | 国产蜜臀 | 日日碰狠狠躁久久躁96avv | 91.com在线观看| 一区在线视频 | 国产精品视频在线播放 | 精品一二区 | 365夜爽爽欧美性午夜免费视频 | 国产女人精品视频 | 国产日韩久久久久69影院 | 日韩色视频 | 四虎影院欧美 | ww亚洲ww亚在线观看 | a视频在线| 欧美三级在线 | 欧美高清视频在线观看 | 永久免费在线观看 | 中文字幕乱码一区二区三区 | 超碰国产在线 | 亚洲a级 | 国产成人久久精品一区二区三区 | 欧产日产国产精品国产 | 日本天天操 | 一区二区电影 | 九九国产在线观看 | 欧美一区二区在线视频 | 中文字幕 在线观看 | 久久久久国产一区二区三区四区 | 精品伊人久久 | 国产一区999 | 免费观看a级毛片在线播放 黄网站免费入口 | 91免费在线视频 | 中文天堂在线观看 | 国产精品免费高清 | 凹凸日日摸日日碰夜夜 | 欧美日韩国产精品一区二区 | 亚洲男人天堂 | 91精品国产综合久久久久久漫画 | 免费在线观看91 |