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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2249|回復: 1
收起左側

STM32單片機+LCD12864顯示一個點的程序

[復制鏈接]
ID:753618 發表于 2022-4-22 16:24 | 顯示全部樓層 |閱讀模式
12864顯示一個點

單片機源程序如下:
#include "delay.h"
#include "12864.h"

    unsigned char x,y;
int main(void)
{
    SystemInit();         //系統初始化
    delay_init(72);      //延時初始化
    LCD12864_InitPort(); //端口初始化
    LCD12864_Init();     //液晶初始化
   
   
     
    for(x=0;x<4;x++)
    {
         for(y=0;y<16;y++)
        {
           LCD12864_Pos(x,y);
           LCD12864_Wdat(0x2E);
           delay_ms(1000);
           LCD12864_Clr();         //    清屏            
        }
   
    }   
   

    while(1);      
}



  1. #include "stm32f10x.h"
  2. #include"12864.h"
  3. #include"delay.h"       
  4. /************************************************************************************************
  5. @f_name: void GPIO_Init(void)
  6. @brief:         初始化硬件端口配置
  7. @param:         None
  8. @return: None
  9. ************************************************************************************************/
  10. void LCD12864_InitPort(void)
  11. {
  12.         GPIO_InitTypeDef  GPIO_InitStructure;        //定義結構體               
  13.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG, ENABLE);   
  14.         GPIO_InitStructure.GPIO_Pin  = LCD_GPIO_CMD;       // 指令口配置
  15.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽輸出模式   
  16.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  17.         GPIO_Init(GPIOD,&GPIO_InitStructure);
  18.        
  19.         GPIO_InitStructure.GPIO_Pin  = LCD_GPIO_DAT;                //數據口配置
  20.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;    //開漏輸出模式
  21.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  22.         GPIO_Init(GPIOG,&GPIO_InitStructure);          //初始化IO口配置
  23.        
  24.         GPIO_Write(GPIOG,0xff00);        //該行指令似乎可以去掉     
  25. }

  26. /************************************************************************************************
  27. @f_name:      LCD12864_busy()
  28. @brief:              檢測忙狀態
  29. @Function:    讀取引腳15的輸入數據.
  30. @annotation:  結合前文 RS=0、RW=1, 以及12864中文字庫說明書之基本指令表: 讀取忙碌標志和地址,  
  31.                   可知:該行指令的實際作用是: 判斷12864是否處于(讀取數據)忙狀態.
  32. @note:        因為判斷的是數據位(DB0-DB7)忙狀態, 所以忙狀態位必須與DB7位一致.
  33. @param:         None
  34. @return: None
  35. ************************************************************************************************/
  36. u8 LCD12864_busy(void)
  37. {
  38.         u8 x;
  39.         LCD_RS(0);
  40.         LCD_RW(1);  
  41.         LCD_EN(1);
  42.         NOP();
  43.         NOP();
  44.         x = Text_Busy;  // 讀取引腳15的輸入數據.  
  45.         LCD_EN(0);
  46.         return x;
  47. }
  48. /************************************************************************************************
  49. @f_name: void LCD12864_Wcmd(u8 dat)
  50. @brief:         寫指令
  51. @param:         u8 dat  輸入指令
  52. @return: None
  53. ************************************************************************************************/
  54. void LCD12864_Wcmd(u8 dat)  // 寫指令
  55. {
  56.         while(LCD12864_busy()); //忙檢測
  57.         LCD_RS(0);      
  58.         LCD_RW(0);
  59.         LCD_EN(0);
  60.         NOP();
  61.         NOP();
  62.         LCD_WriteData(dat);          
  63.         NOP();
  64.         NOP();
  65.         LCD_EN(1);
  66.         NOP();
  67.         NOP();
  68.         LCD_EN(0);
  69. }
  70. /************************************************************************************************
  71. @f_name: void LCD12864_Wdat(u8 dat)
  72. @brief:         寫數據
  73. @param:         u8 dat 輸入數據
  74. @return: None
  75. ************************************************************************************************/
  76. void LCD12864_Wdat(u8 dat)  //寫數據
  77. {
  78.         while(LCD12864_busy()); //忙檢測
  79.         LCD_RS(1);      
  80.         LCD_RW(0);
  81.         LCD_EN(0);
  82.         NOP();
  83.         NOP();
  84.         LCD_WriteData(dat);         
  85.         NOP();
  86.         NOP();
  87.         LCD_EN(1);
  88.         NOP();
  89.         NOP();
  90.         LCD_EN(0);
  91. }
  92. /************************************************************************************************
  93. @f_name: void LCD12864_Init(void)
  94. @brief:         液晶初始化
  95. @param:         None
  96. @return: None
  97. ************************************************************************************************/
  98. void LCD12864_Init(void)
  99. {       
  100.         LCD_PSB(1);     //并口方式   
  101.         LCD_RST(0);     //液晶復位         
  102.     delay_ms(3);                  
  103.     LCD_RST(1);          //置高電平等待復位
  104.     delay_ms(3);
  105. //        LCD12864_Wcmd(0x34);    //擴充指令操作
  106.     delay_ms(5);
  107.     LCD12864_Wcmd(0x30);    //基本指令操作
  108.     delay_ms(5);
  109.     LCD12864_Wcmd(0x0C);    //顯示開,關光標
  110.     delay_ms(5);
  111.     LCD12864_Wcmd(0x01);    //清屏
  112.     delay_ms(5);
  113. }
  114. /************************************************************************************************
  115. @f_name: void LCD12864_Clr(void)
  116. @brief:         清屏
  117. @param:         None
  118. @return: None
  119. ************************************************************************************************/
  120. void LCD12864_Clr(void)
  121. {
  122.         LCD12864_Wcmd(0x34);    //擴充指令操作        “繪圖”
  123.     delay_ms(5);
  124.     LCD12864_Wcmd(0x30);    //基本指令操作
  125.     delay_ms(5);
  126.         LCD12864_Wcmd(0x01);    //清屏   
  127.     delay_ms(5);
  128. }
  129. /************************************************************************************************
  130. @f_name: void LCD12864_Pos(u8 x,u8 y)
  131. @brief:         設置顯示位置
  132. @param:         u8 x:X軸    u8 y:Y軸  
  133. @return: None
  134. ************************************************************************************************/
  135. void LCD12864_Pos(u8 x,u8 y)
  136. {
  137.         u8  pos;
  138.         if (x==1)                   {x=0x80;}          
  139.         else if (x==2)         {x=0x90;}       
  140.         else if (x==3)         {x=0x88;}         
  141.         else if (x==4)   {x=0x98;}         
  142.         else x=0x80;
  143.         pos = x+y ;        
  144.         LCD12864_Wcmd(pos);  //顯示地址  
  145. }
  146. /************************************************************************************************
  147. @f_name: void LCD12864_PhotoDis(u8 *bmp)
  148. @brief:         顯示圖形
  149. @param:         u8 *bmp 圖形數組
  150. @return: None
  151. ************************************************************************************************/
  152. void LCD12864_PhotoDis(u8 *bmp)
  153. {
  154.         u8 i,j;
  155.         LCD12864_Wcmd(0x34); //關閉圖形顯示
  156.        
  157.         for(i=0;i<32;i++)
  158.         {
  159.                 LCD12864_Wcmd(0x80+i);  //先寫入水平坐標值
  160.                 LCD12864_Wcmd(0x80);      //寫入垂直坐標值
  161.                 for(j=0;j<16;j++)                     //再寫入兩個8位元的數據   
  162.                 LCD12864_Wdat(*bmp++);     
  163.                 delay_ms(1);
  164.         }
  165.        
  166.         for(i=0;i<32;i++)
  167.         {
  168.                 LCD12864_Wcmd(0x80+i);
  169.                 LCD12864_Wcmd(0x88);
  170.                 for(j=0;j<16;j++)         
  171.                 LCD12864_Wdat(*bmp++);   
  172.                 delay_ms(1);
  173.         }
  174.         LCD12864_Wcmd(0x36);       //寫完數據,開圖形顯示        
  175. }
  176. /************************************************************************************************
  177. @f_name: void LCD_ShowString(u8 x,u8 y,const u8 *p)
  178. @brief:         顯示字符串
  179. @param:         u8 *bmp 圖形數組
  180. @return: None
  181. ************************************************************************************************/
  182. void LCD_ShowString(u8 x,u8 y,const u8 *p)
  183. {
  184.         u8 temp;
  185.         if(x>4) {x=1;}
  186.         if(y>4) {y=0;}
  187.        
  188.         LCD12864_Pos(x,y);
  189.        
  190.         temp=*p;
  191.         while(temp!='\0')            
  192.         {
  193.                 LCD12864_Wdat(temp);
  194.                 temp=*(++p);
  195.         }
  196. }
  197. /************************************************************************************************
  198. @f_name: void NOP(void)
  199. @brief:         延時函數
  200. @param:         None
  201. @return: None
  202. ************************************************************************************************/
  203. void NOP(void)
  204. { u8 i;        for(i=0; i<100; i++); }
復制代碼

Keil代碼下載:
12864_poi_display.7z (190.16 KB, 下載次數: 39)


評分

參與人數 1黑幣 +30 收起 理由
admin + 30 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:440028 發表于 2022-5-6 16:36 | 顯示全部樓層
stm32的仿真圖可以做一個比較好
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人福利网站 | 成人99| 日韩欧美在线观看 | 91极品尤物在线播放国产 | 自拍视频精品 | 一二三四在线视频观看社区 | 黄色毛片在线观看 | 国产探花在线观看视频 | 欧美精品在线观看 | 欧美一区二区三区日韩 | 久久久99国产精品免费 | 欧美精品一区在线发布 | 大学生a级毛片免费视频 | 96久久久久久 | 97超碰在线播放 | 亚洲黄色视屏 | 美女视频一区二区三区 | 精品视频在线观看 | 国产亚洲日本精品 | 蜜臀网 | 久久久www成人免费精品张筱雨 | 精品产国自在拍 | 久久国产婷婷国产香蕉 | 18gay男同69亚洲网站 | 成人夜晚看av | 欧美jizzhd精品欧美巨大免费 | 国产日韩一区二区三免费高清 | 国产成人在线一区二区 | 精产嫩模国品一二三区 | 欧美 日韩 国产 成人 在线 | 91成人精品 | 国产成年人视频 | 九九热免费看 | 日韩精品无码一区二区三区 | 欧美一区二区三区 | 国产伦精品一区二区三区照片91 | 久久久www成人免费无遮挡大片 | 精品国产欧美一区二区三区成人 | 在线一区二区国产 | 国产第一页在线观看 | 国产精品18久久久久久白浆动漫 |