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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2314|回復: 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 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:440028 發表于 2022-5-6 16:36 | 只看該作者
stm32的仿真圖可以做一個比較好
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表