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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12651|回復: 25
打印 上一主題 下一主題
收起左側

Proteus仿真STM32驅動12864液晶

  [復制鏈接]
跳轉到指定樓層
樓主
ID:340846 發(fā)表于 2018-7-3 17:47 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
proteus下8051驅動12864資料很多,在別人的基礎上做了修改,改用stm32,仿真通過.


單片機源程序如下:

  1. #include "main.h"
  2. #include "stm32f1xx_hal.h"
  3. //#include "stm32f1xx_hal_gpio.h"

  4. #define uchar unsigned char
  5. #define uint unsigned int




  6. //#define         databus         P1
  7. #define     databus     GPIOB


  8. //sbit                 cs1 = P3^3;                   //左屏幕選擇,低電平有效
  9. #define     cs1     GPIO_PIN_3
  10. #define    set_cs1     GPIO_SetBits(GPIOC,   cs1)
  11. #define    clr_cs1     GPIO_ResetBits(GPIOC, cs1)

  12. //sbit                 cs2 = P3^4;                   //右屏幕選擇
  13. #define     cs2     GPIO_PIN_4
  14. #define    set_cs2     GPIO_SetBits(GPIOC,   cs2)
  15. #define    clr_cs2     GPIO_ResetBits(GPIOC, cs2)


  16. //sbit                 e = P3^5;                    //指令數(shù)據(jù)控制
  17. #define     e      GPIO_PIN_5
  18. #define    set_e     GPIO_SetBits(GPIOC,   e)
  19. #define    clr_e     GPIO_ResetBits(GPIOC, e)


  20. //sbit                   wr = P3^6;                    //讀寫控制
  21. #define           wr     GPIO_PIN_6
  22. #define    set_wr     GPIO_SetBits(GPIOC,   wr)
  23. #define    clr_wr     GPIO_ResetBits(GPIOC, wr)


  24. //sbit                 rs = P3^7;                    //指令數(shù)據(jù)選擇
  25. #define     rs     GPIO_PIN_7
  26. #define    set_rs     GPIO_SetBits(GPIOC,   rs)
  27. #define    clr_rs     GPIO_ResetBits(GPIOC, rs)



  28. void LcdDelay(uint time)
  29. {
  30.         while(time--);
  31. }

  32. void _NOP_(void)
  33. {
  34.     uint i = 200;
  35.     while(i > 0)
  36.                 {
  37.         i--;
  38.     }
  39. }

  40. /**********************************
  41. 寫指令
  42. **********************************/
  43. void SendCommand(uchar command)
  44. {
  45.         set_e;                 //e=1;       
  46.         clr_wr;         //wr=0;       
  47.         clr_rs;         //rs=0;       
  48.         databus->ODR = (databus->ODR & 0xff00)|command;  //databus=command;
  49.   _NOP_();
  50.         clr_e;                 //e=0;
  51.   _NOP_();
  52. }

  53. /**********************************
  54. 寫數(shù)據(jù)
  55. **********************************/
  56. void WriteData(uchar dat)
  57. {
  58.         set_e;                //e=1;
  59.         clr_wr;                //wr=0;
  60.         set_rs;                //rs=1;
  61.         databus->ODR =        (databus->ODR & 0xff00)|dat;        //databus=dat;
  62.   _NOP_();
  63.         clr_e;                //e=0;
  64.   _NOP_();
  65. }

  66. /**********************************
  67. 顯示開/關
  68. **********************************/
  69. void SetOnOff(uchar onoff)
  70. {
  71.         if(onoff==1)
  72.         {
  73.                 SendCommand(0x3f);       
  74.         }       
  75.         else
  76.         {
  77.                 SendCommand(0x3e);
  78.         }
  79. }


  80. /**********************************
  81. 選擇頁
  82. **********************************/
  83. void SetLine(uchar line)         //12864總共有8頁(0~7),每頁有8行
  84. {
  85.         line=line&0x07;                          //只取后三位xxxx x111  ,這3個是要改變位置的數(shù)據(jù)
  86.         line=line|0xb8;                          //頁設置的固定格式
  87.         SendCommand(line);
  88. }


  89. /**********************************
  90. 選擇列
  91. **********************************/
  92. void SetColum(uchar colum)        //12864每半屏有64列(0~63),分為左右2屏
  93. {
  94.         colum=colum&0x3f;         //xx11 1111,這個是要改變Y位置的數(shù)據(jù)
  95.         colum=colum|0x40;         //固定格式
  96.         SendCommand(colum);
  97. }


  98. /**********************************
  99. 選擇起始行
  100. **********************************/
  101. void SetStartLine(uchar startline)
  102. {
  103.         startline=startline&0x3f;                //xx11 1111,這個是要改變x位置的數(shù)據(jù)
  104.         startline=startline|0xc0;                //11xxxxxx,是起始行設置的固定指令
  105.         SendCommand(startline);
  106. }


  107. /**********************************
  108. 選擇左右屏                0:左屏,1:右屏,2:全屏
  109. **********************************/
  110. void SelectScreen(uchar screen)
  111. {
  112.         switch(screen)
  113.         {
  114.                 case 0:
  115.                                 clr_cs1;        //cs1=0;
  116.                                 LcdDelay(2);
  117.                                 set_cs2;        //cs2=1;
  118.                                 LcdDelay(2);
  119.                                 break;
  120.                 case 1:
  121.                                 set_cs1;        //cs1=1;
  122.                                 LcdDelay(2);
  123.                                 clr_cs2;        //cs2=0;
  124.                                 LcdDelay(2);
  125.                                 break;
  126.                 case 2:
  127.                                 clr_cs1;        //cs1=0;
  128.                                 LcdDelay(2);
  129.                                 clr_cs2;        //cs2=0;
  130.                                 LcdDelay(2);
  131.                                 break;
  132.         }
  133. }


  134. /**********************************
  135. 顯示一個英文字符
  136. **********************************/
  137. void Show_english(uchar line,uchar column,uchar *address)
  138. {
  139.         uchar i;
  140.         SetLine(line);
  141.         SetColum(column);
  142.         for(i=0;i<8;i++)
  143.         {
  144.                 WriteData(*address);
  145.                 address++;       
  146.         }
  147.        
  148.         SetLine(line+1);
  149.         SetColum(column);
  150.         for(i=0;i<8;i++)
  151.         {
  152.                 WriteData(*address);
  153.                 address++;       
  154.         }
  155. }


  156. /**********************************
  157. 清屏
  158. **********************************/
  159. void ClearScreen(uchar screen)
  160. {
  161.         uchar i,j;
  162.         SelectScreen(screen);
  163.         for(i=0;i<8;i++)
  164.         {
  165.                 SetLine(i);
  166.                 SetColum(0);
  167.                 for(j=0;j<64;j++)
  168.                 {
  169.                         WriteData(0);                       
  170.                 }       
  171.         }
  172. }

  173. /**********************************
  174. 12864初始化
  175. **********************************/
  176. void InitLcd()
  177. {
  178.         SetOnOff(0);                //顯示關
  179.         ClearScreen(2);                //清屏
  180.         SetLine(0);                        //頁設置
  181.         SetColum(0);                //列設置
  182.         SetStartLine(0);        //設置起始頁
  183.         SetOnOff(1);                //顯示開
  184. }



  185. TIM_HandleTypeDef htim1;

  186. void SystemClock_Config(void);
  187. void Error_Handler(void);
  188. static void MX_TIM1_Init(void);


  189. static void MX_GPIO_Init(void)
  190. {
  191.   GPIO_InitTypeDef GPIO_InitStruct;

  192.   __HAL_RCC_GPIOA_CLK_ENABLE();
  193.         __HAL_RCC_GPIOB_CLK_ENABLE();
  194.   __HAL_RCC_GPIOC_CLK_ENABLE();

  195.   //HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);

  196.         //HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
  197.   GPIO_InitStruct.Pin = GPIO_PIN_0;
  198.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  199.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  200.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  201.        
  202.         //HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
  203.         GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;;
  204.         HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  205.        

  206.         //HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
  207.         GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
  208.         HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  209.        
  210.        
  211. }

  212.   uchar hzk[]=
  213. {
  214. /*--  文字:  I  --*/
  215. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  216. 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

  217. /*--  文字:     --*/
  218. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  219. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  220. /*--  文字:  c  --*/
  221. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  222. 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,

  223. /*--  文字:  a  --*/
  224. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  225. 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,

  226. /*--  文字:  n  --*/
  227. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  228. 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,

  229. /*--  文字:     --*/
  230. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  231. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  232. /*--  文字:  m  --*/
  233. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  234. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,

  235. /*--  文字:  a  --*/
  236. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  237. 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,

  238. /*--  文字:  k  --*/
  239. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  240. 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,

  241. /*--  文字:  e  --*/
  242. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  243. 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,

  244. /*--  文字:     --*/
  245. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  246. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  247. /*--  文字:  i  --*/
  248. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  249. 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

  250. /*--  文字:  t  --*/
  251. /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
  252. 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,
  253. };

  254. int main(void)
  255. {
  256.         uchar i,line,colum,j ;
  257.         uchar *address ;
  258.        
  259.   HAL_Init();

  260.   SystemClock_Config();

  261.   MX_GPIO_Init();
  262.   
  263.   while (1)
  264.   {
  265.                
  266.                 line=4;                               
  267.                 colum=0;                       
  268.                 address=hzk;               
  269.                 SetOnOff(1);               
  270.        
  271.                 for(i=0;i<13;i++)       
  272.                 {
  273.                         if(i<8)                               
  274.                         {
  275.                                 SelectScreen(0);                                                
  276.                                 Show_english(line,colum,address);               
  277.                                 address+=16;                                                         
  278.                                 colum+=8;                                                                 
  279.                         }       
  280.                         else                                                 
  281.                         {               
  282.                                 SelectScreen(1);
  283.                                 Show_english(line,colum,address);
  284.                                 address+=16;
  285.                                 colum+=8;                                               
  286.                         }
  287.                 }       
  288.                
  289.                 for(i = 0;i < 50;i ++)  LcdDelay(30000);        //延時
  290.   }
  291.   

  292. }


  293. void SystemClock_Config(void)
  294. {

  295.   RCC_OscInitTypeDef RCC_OscInitStruct;
  296.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  297.     /**Initializes the CPU, AHB and APB busses clocks
  298.     */
  299.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  300.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  301.   RCC_OscInitStruct.HSICalibrationValue = 16;
  302.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  303.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  304.   {
  305.     Error_Handler();
  306.   }

  307.     /**Initializes the CPU, AHB and APB busses clocks
  308.     */
  309.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  310.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  311.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  312.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  313.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  314.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  315.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  316.   {
  317.     Error_Handler();
  318.   }

  319.     /**Configure the Systick interrupt time
  320.     */
  321.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  322.     /**Configure the Systick
  323.     */
  324.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  325.   /* SysTick_IRQn interrupt configuration */
  326.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  327. }

  328. /* TIM1 init function */
  329. static void MX_TIM1_Init(void)
  330. {

  331.   TIM_ClockConfigTypeDef sClockSourceConfig;
  332.   TIM_MasterConfigTypeDef sMasterConfig;

  333.   htim1.Instance = TIM1;
  334.   htim1.Init.Prescaler = 0;
  335.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  336.   htim1.Init.Period = 0;
  337.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  338.   htim1.Init.RepetitionCounter = 0;
  339.   if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
  340.   {
  341.     Error_Handler();
  342.   }

  343.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  344.   if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
  345.   {
  346. ……………………

  347. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
stm32_12864.zip (13.48 MB, 下載次數(shù): 453)



評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂3 踩
回復

使用道具 舉報

沙發(fā)
ID:340846 發(fā)表于 2018-7-3 17:47 | 只看該作者
自己頂一下,目前proteus下面是用stm32的資料還不多
回復

使用道具 舉報

板凳
ID:79874 發(fā)表于 2018-7-31 18:29 | 只看該作者
下載不了
回復

使用道具 舉報

地板
ID:262075 發(fā)表于 2018-8-13 07:51 | 只看該作者
很好,謝謝樓主分享設計成果
回復

使用道具 舉報

5#
ID:385072 發(fā)表于 2018-8-26 16:46 | 只看該作者
很有用,就是有點亂,把文件分開就好了
回復

使用道具 舉報

6#
ID:380992 發(fā)表于 2018-8-27 07:46 | 只看該作者
謝謝,學習一下。
回復

使用道具 舉報

7#
ID:280876 發(fā)表于 2018-8-28 11:50 | 只看該作者
真夠亂的,前面宏定義用標準庫,后面用HAL庫。。。
回復

使用道具 舉報

8#
ID:18916 發(fā)表于 2018-9-7 22:06 | 只看該作者
學習學習
回復

使用道具 舉報

9#
ID:395336 發(fā)表于 2018-9-8 14:30 | 只看該作者
感謝分享,努力學習中
回復

使用道具 舉報

10#
ID:86450 發(fā)表于 2018-9-13 08:32 | 只看該作者
感謝分享,努力學習中
回復

使用道具 舉報

11#
ID:410576 發(fā)表于 2018-10-16 16:35 | 只看該作者
謝謝分享
回復

使用道具 舉報

12#
ID:410815 發(fā)表于 2018-10-16 22:00 | 只看該作者
大家看了后怎么樣,有多少參考價值啊,我的黑幣太少了,沒法看

評分

參與人數(shù) 1黑幣 +16 收起 理由
yoxi + 16

查看全部評分

回復

使用道具 舉報

13#
ID:242300 發(fā)表于 2018-10-17 02:14 | 只看該作者
hal庫和標準庫可以混用嗎
回復

使用道具 舉報

14#
ID:389751 發(fā)表于 2018-10-17 10:13 | 只看該作者
謝謝分享
回復

使用道具 舉報

15#
ID:389751 發(fā)表于 2018-10-17 10:14 | 只看該作者
qweer 發(fā)表于 2018-10-17 02:14
hal庫和標準庫可以混用嗎

應該可以混用吧
回復

使用道具 舉報

16#
ID:184706 發(fā)表于 2019-1-12 14:33 | 只看該作者
很不錯的  我研究一下

評分

參與人數(shù) 1黑幣 +16 收起 理由
yoxi + 16

查看全部評分

回復

使用道具 舉報

17#
ID:88852 發(fā)表于 2019-1-25 16:19 | 只看該作者
好帖子,頂!。。。。。。!

評分

參與人數(shù) 1黑幣 +16 收起 理由
yoxi + 16

查看全部評分

回復

使用道具 舉報

18#
ID:328121 發(fā)表于 2019-2-15 08:47 | 只看該作者
可以看一下
回復

使用道具 舉報

19#
ID:374009 發(fā)表于 2020-2-5 11:49 | 只看該作者
寫了,參考中
回復

使用道具 舉報

20#
ID:86450 發(fā)表于 2020-2-20 15:10 | 只看該作者

很好,謝謝樓主分享設計成果
回復

使用道具 舉報

21#
ID:707213 發(fā)表于 2020-4-3 23:34 | 只看該作者
謝謝樓主分享!
回復

使用道具 舉報

22#
ID:736707 發(fā)表于 2020-4-25 17:08 | 只看該作者
萬分感謝,學習一下
回復

使用道具 舉報

23#
ID:748904 發(fā)表于 2020-5-18 16:50 | 只看該作者
很好,謝謝分享
回復

使用道具 舉報

24#
ID:773893 發(fā)表于 2020-6-9 15:51 | 只看該作者
我想知道咱們能夠建立到文件到keil中需要加壓縮包里的哪些文件
回復

使用道具 舉報

25#
ID:781434 發(fā)表于 2020-6-18 13:23 | 只看該作者
protues 仿lcd12864只能用并行數(shù)據(jù)嗎 能不能用串行數(shù)據(jù)
回復

使用道具 舉報

26#
ID:889174 發(fā)表于 2021-3-7 11:20 | 只看該作者
jack609519555 發(fā)表于 2018-10-16 22:00
大家看了后怎么樣,有多少參考價值啊,我的黑幣太少了,沒法看

加油,努力學習
回復

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久国产精品入口麻豆 | 自拍在线 | 九九热精品视频在线观看 | 日韩av在线一区 | 国产精品久久久精品 | 亚洲精品国产电影 | 久久久久国产精品人 | 免费福利视频一区二区三区 | 2018天天干天天操 | 伊人久久一区二区 | 日日av| 久久久99精品免费观看 | 久久99久久久久 | 精品欧美乱码久久久久久1区2区 | 羞羞视频在线网站观看 | 91一区二区三区 | 日韩一区二区福利视频 | 国产成人精品午夜视频免费 | 亚洲精品视频免费观看 | 国产精品久久久久免费 | 国产精品96久久久久久 | 国产毛片久久久久久久久春天 | 久久国产一区 | 成人天堂 | 国产成人精品久久 | 日韩精品视频网 | 欧美成人精品一区二区男人看 | 国产亚洲精品综合一区 | 97国产精品视频 | 精品国产一区三区 | 国产精品乱码一区二区三区 | 日韩中出| 亚洲精品1 | 精品久久久久久久久久久久久 | 国产免费一二三区 | 国产日韩精品视频 | 欧美三级久久久 | 亚洲精选久久 | 亚洲大片| 超碰在线免费公开 | 91精品国产91久久综合桃花 |