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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32的lcd12864程序

  [復(fù)制鏈接]
ID:114055 發(fā)表于 2016-4-13 20:44 | 顯示全部樓層 |閱讀模式
0.png

12864的stm32單片機(jī)顯示程序下載: 顯示.rar (3.14 MB, 下載次數(shù): 154)

主要的程序預(yù)覽:
  1. #include "stm32f10x.h"
  2. #include "delay.h"    //必須配合delay.c和delay.h文件使用,所以要包含delay.h。
  3. #include "display12864.h"

  4. #define u16 unsigned short   //為了可移植性好,對這兩個 STM 32 已經(jīng)定義過的變量,再定義一次。
  5. #define u8 unsigned char

  6. /********** 以下是相關(guān)引腳定義。**************/

  7. #define DisIO GPIOC                 //定義12864要使用的I/O端口。
  8. #define DisClk RCC_APB2Periph_GPIOC  //定義12864要使用的I/O端口的時鐘。
  9. #define Data GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
  10.                                        //定義12864使用的數(shù)據(jù)引腳。
  11. #define RS GPIO_Pin_9
  12. #define RW GPIO_Pin_10
  13. #define EN GPIO_Pin_11       //定義使能端使用的引腳。
  14. #define PSB GPIO_Pin_12      //定義并,串行數(shù)據(jù)模式的選擇端口使用的引腳。

  15. /*********************************************/
  16.                                                             
  17. GPIO_InitTypeDef  GPIOStru;  //定義用于定義所以引腳為輸出的變量。

  18. void IOInitOut(void)           //把所有端口初始化為推挽輸出模式的函數(shù)。
  19. {
  20.     GPIOStru.GPIO_Mode = GPIO_Mode_Out_PP;//定義所有的引腳為推挽輸出的變量初始化。
  21.     GPIOStru.GPIO_Speed = GPIO_Speed_50MHz;
  22.     GPIOStru.GPIO_Pin = Data|RS|RW|EN|PSB;

  23.     RCC_APB2PeriphClockCmd(DisClk,ENABLE);
  24.     GPIO_Init(DisIO,&GPIOStru);        
  25. }

  26. void IOInitIn(void)           //把數(shù)據(jù)引腳初始化為浮空輸入的函數(shù)。
  27. {
  28.     GPIOStru.GPIO_Mode = GPIO_Mode_IN_FLOATING;//定義數(shù)據(jù)引腳為浮空輸入的變量初始化。
  29.     GPIOStru.GPIO_Speed = GPIO_Speed_50MHz;
  30.     GPIOStru.GPIO_Pin = Data;

  31.     RCC_APB2PeriphClockCmd(DisClk,ENABLE);   //把所有端口初始化為輸出模式的函數(shù)。   
  32.     GPIO_Init(DisIO,&GPIOStru);        
  33. }

  34. void WaitBusy(void)          //等待12864的忙狀態(tài)結(jié)束的函數(shù)。
  35. {
  36.     IOInitIn();        //把數(shù)據(jù)引腳定義為浮空輸入;
  37.     GPIO_ResetBits(DisIO,RS);  //RS = 0.
  38.     GPIO_SetBits(DisIO,RW);    //RW = 1.
  39.     GPIO_SetBits(DisIO,EN);    //EN = 1.
  40.     while(GPIO_ReadInputData(DisIO) & 0x0080); //只要位7的值,位7是忙標(biāo)志位。
  41.     GPIO_ResetBits(DisIO,EN);  //EN = 0;
  42.     IOInitOut();      //把所有引腳定義為輸出。
  43. }

  44. void WriteCmd(u8 cmd)    //寫命令函數(shù)。
  45. {
  46.           WaitBusy();
  47.     GPIO_ResetBits(DisIO,RS);  //RS = 0.
  48.     GPIO_ResetBits(DisIO,RW);  //RW = 0.
  49.     GPIO_SetBits(DisIO,EN);    //EN = 1.
  50.     DisIO->ODR=((DisIO->ODR & 0xff00)|cmd); //此處,只有直接操作寄存器才能
  51.                   //達(dá)到,只改變輸出數(shù)據(jù)寄存器ODR的低8位,其它位
  52.                   //不變的目的。因為,只有低8位是數(shù)據(jù)引腳,
  53.                   //其它位可能是控制引腳,不能改變。
  54.     delay_ms(2);
  55.     GPIO_ResetBits(DisIO,EN);  //EN = 0;
  56.     delay_ms(2);         
  57. }

  58. void WriteData(u8 data)  //寫數(shù)據(jù)函數(shù)。
  59. {
  60.         WaitBusy();
  61.     GPIO_SetBits(DisIO,RS);  //RS = 1.
  62.     GPIO_ResetBits(DisIO,RW);  //RW = 0.
  63.     GPIO_SetBits(DisIO,EN);    //EN = 1.
  64.     DisIO->ODR=((DisIO->ODR & 0xff00)|data);  //同上。
  65.     delay_ms(2);
  66.     GPIO_ResetBits(DisIO,EN);  //EN = 0;
  67.     delay_ms(2);
  68. }

  69. void InitDis(void)   //初始化 12864 和要用到的 STM 32 的引腳。
  70. {
  71.     IOInitOut();         
  72.     delay_init(8);   //初始化延時函數(shù)的微妙計數(shù)基數(shù)。  
  73.     GPIO_SetBits(DisIO,PSB);  //令PSB=1,設(shè)置為并行數(shù)據(jù)模式。
  74.     delay_ms(2);
  75.     WriteCmd(0x30);  //選擇基本指令集,和,8位數(shù)據(jù)模式。
  76.     delay_ms(2);
  77.     WriteCmd(0x0c);  //開顯示,無游標(biāo),不反白.
  78.     delay_ms(2);
  79.     WriteCmd(0x01);  //清除顯示,并將 DDRAM 的地址計數(shù)器 AC 設(shè)為 00H.
  80.     delay_ms(2);
  81.     WriteCmd(0x06);  //設(shè)置,外部讀寫數(shù)據(jù)后,地址記數(shù)器 AC 會自動加 1。
  82.     delay_ms(2);
  83.     WriteCmd(0x80);  //將 DDRAM 地址計數(shù)器 AC 設(shè)為 0.
  84.     delay_ms(2);        
  85. }

  86. void DisStr(u8 *s)    //顯示字符串的函數(shù)。
  87. {
  88.     while(*s != '')
  89.     {
  90.         WriteData(*s);
  91.         s++;
  92.         delay_ms(2);
  93.     }
  94. }

  95. void DisInt(long int num)  //顯示整型變量的函數(shù),最多顯示16位的整數(shù)。只能顯示正數(shù)。
  96. {
  97.         u8 temp[17];
  98.         u8 str[17];
  99.         int i=0,j=0;
  100.         while(num != 0)          //這里不能用num%10 != 0,如果num是10的整數(shù)倍,
  101.                           //例如,100,這樣就會出錯,根本就不能進(jìn)入循環(huán)體。
  102.         {
  103.                 temp[i] = (num%10)+0x30;
  104.                 num/=10;
  105.                 i++;
  106.         }
  107.         i--;           //因為i在退出循環(huán)之前還自加了一次,此時,
  108.                         //指向最后一個存儲有用值的元素的后一個位置。
  109.         while(i != -1)         //因為i=0時,temp[0]還是有用值。
  110.         {
  111.                 str[j] = temp[i];
  112.                 j++;
  113.                 i--;        
  114.         }
  115.         str[j]='';  //因為i在退出循環(huán)之前還自加了一次,此時,
  116.                       //指向最后一個存儲有用值的元素的后一個位置。
  117.         DisStr(str);        
  118. }

  119. void DisFloat(float fnum) //顯示有4位小數(shù)的浮點(diǎn)數(shù),總位數(shù)不超過16位。
  120. {
  121.         long int num = fnum*10000;
  122.         u8 temp[17];
  123.         u8 str[17];
  124.         int i=0,j=0;
  125.         while(num != 0)                          
  126.         {
  127.                 temp[i] = (num%10)+0x30;
  128.                 num/=10;
  129.                 i++;
  130.                 if(i == 4)         //4位小數(shù)處理完后,加入小數(shù)點(diǎn)。
  131.                 {
  132.                         temp[i] = '.';
  133.                         i++;
  134.                 }
  135.         }
  136.         i--;   
  137.         while(i != -1)        
  138.         {
  139.                 str[j] = temp[i];
  140.                 j++;
  141.                 i--;        
  142.         }
  143.         str[j]='';  
  144.         DisStr(str);                        
  145. }

  146. /*以下是光標(biāo)定位函數(shù),第一個參數(shù)為行坐標(biāo),第二個為列坐標(biāo),起始坐標(biāo)是1行1列。
  147. 只能以16個點(diǎn)的寬度為單位移動。*/

  148. void locate16(int row, int col)
  149. {
  150.         switch(row)
  151.         {
  152.                 case 1: WriteCmd(0x80+col-1); break;
  153.                 case 2: WriteCmd(0x90+col-1); break;
  154.                 case 3: WriteCmd(0x88+col-1); break;
  155.                 case 4: WriteCmd(0x98+col-1); break;
  156.         }
  157. }

  158. /*光標(biāo)定位函數(shù)定義結(jié)束。*/

復(fù)制代碼



建議把fwlib組里的.c文件生成一個.lib庫吧,因為一般是不需要改這部分的代碼的,
當(dāng)需要重新編譯的時候,全部庫文件都編譯的話會把速度拖慢的。。。
先把其它組的 include in target build 屬性去掉

bae746a1b2bc08745cfd755fe76282c0_941.gif


這個是默認(rèn)的選擇,點(diǎn)到?jīng)]勾了就表示去掉了
3b0c853d823941c2a3a6269bd144c096_687.gif


然后設(shè)置項目的output屬性生成lib文件
c5a0b092e7c9430ca2177a8be4cf8b09_858.gif

評分

參與人數(shù) 2黑幣 +55 收起 理由
邰夏留 + 5 共享資料的黑幣獎勵!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:113502 發(fā)表于 2016-5-10 10:08 | 顯示全部樓層
不錯謝謝
回復(fù)

使用道具 舉報

ID:129602 發(fā)表于 2016-7-7 20:33 | 顯示全部樓層
想學(xué)習(xí)stm32的編程!
回復(fù)

使用道具 舉報

ID:138624 發(fā)表于 2016-9-7 09:02 | 顯示全部樓層
不錯哦
回復(fù)

使用道具 舉報

ID:126343 發(fā)表于 2016-10-30 23:07 來自觸屏版 | 顯示全部樓層
借鑒不錯
回復(fù)

使用道具 舉報

ID:79034 發(fā)表于 2016-11-21 08:27 | 顯示全部樓層
謝謝樓主分享,下載了就頂貼,養(yǎng)成良好的習(xí)慣。方便廣大新手學(xué)習(xí)。
回復(fù)

使用道具 舉報

ID:171111 發(fā)表于 2017-4-11 20:41 | 顯示全部樓層
謝謝樓主分享                           
回復(fù)

使用道具 舉報

ID:162382 發(fā)表于 2018-2-6 17:17 | 顯示全部樓層
沒有改代碼,為什么我的12864沒有顯示?求解
回復(fù)

使用道具 舉報

ID:377872 發(fā)表于 2019-3-4 09:29 | 顯示全部樓層
早點(diǎn)睡吧 發(fā)表于 2018-2-6 17:17
沒有改代碼,為什么我的12864沒有顯示?求解

會不會是對比度沒調(diào)好?
回復(fù)

使用道具 舉報

ID:611584 發(fā)表于 2019-9-26 13:50 來自觸屏版 | 顯示全部樓層
謝謝分享。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国 | 玖玖综合在线 | www操操 | 少妇午夜一级艳片欧美精品 | 国产伦精品一区二区 | 国产一区二区精品在线观看 | 午夜影院官网 | 亚洲成av人片在线观看无码 | 国产成人免费视频网站高清观看视频 | 青青草国产在线观看 | 怡红院怡春院一级毛片 | 国产一区二区免费 | 中文字幕 亚洲一区 | 日韩三级电影一区二区 | 黄色欧美在线 | 99精品视频免费观看 | 成人精品毛片国产亚洲av十九禁 | 国产乱码久久久久久 | 精品欧美黑人一区二区三区 | 亚洲综合大片69999 | 日韩三级在线观看 | 国产精品久久一区二区三区 | 欧美一级大片 | 激情网站在线观看 | www.久草.com| 日韩av大片免费看 | 巨大黑人极品videos精品 | 欧美精品一区二区三区四区五区 | 欧美一级久久 | 亚洲永久字幕 | 久久噜噜噜精品国产亚洲综合 | 亚洲欧洲色视频 | 欧美性生交大片免费 | 在线播放一区二区三区 | 国产黄色电影 | 国产日韩一区二区三免费高清 | 成人在线视频观看 | 人操人免费视频 | 国产福利91精品一区二区三区 | 亚洲国产精品网站 | 国产精品久久久久久久久久免费 |