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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32單片機(jī)LCD1602 IO亂口理合驅(qū)動程序

[復(fù)制鏈接]
ID:640600 發(fā)表于 2020-10-30 23:52 | 顯示全部樓層 |閱讀模式
自己空閑的時間寫了一下LCD1602的亂并口然后把各個IO口進(jìn)行數(shù)據(jù)理合來輸出控制LCD1602  有改善的請?zhí)岢鰜?br /> 實(shí)驗(yàn)平臺用的是野火指南者的STM32F103VET6的開發(fā)板

制作出來的實(shí)物圖如下:
IMG_20201030_234237.jpg IMG_20201030_234216.jpg IMG_20201030_234202.jpg

單片機(jī)源程序如下:
  1. /*****************************************************************
  2. * @attention 注意: 本程序是LCD1602的亂口的數(shù)據(jù)傳輸?shù)尿?qū)動適用于任意口的IO口
  3.         * IO口一定要先初始化 不然無法使用
  4.         *
  5. **********************************************************************/
  6. #include "lcd1602_luan.h"

  7. //  sbit RS=P3^5;
  8. //  sbit RW=P3^6;
  9. //  sbit EN=P3^4;
  10. //uchar  tab1[]="2020-09-30 wek:3";//第一行顯示0123456789abcdef共16個字符
  11. //uchar  tab2[]="    V temp:  . C"; //第二行顯示時鐘的模板

  12. uint8_t  tab1_LUAN[]="C0:3.3V C1:3.3V ";//第一行顯示0123456789abcdef共16個字符
  13. uint8_t  tab2_LUAN[]="C2:3.3V C3:3.3V "; //第二行顯示時鐘的模板
  14. uint8_t  tab3_LUAN[]="C4: . V C5: . V ";//第一行顯示0123456789abcdef共16個字符
  15. uint8_t  tab4_LUAN[]="                "; //第二行顯示時鐘的模板

  16. uint8_t  tab5_LUAN[]="                ";//第一行顯示0123456789abcdef共16個字符
  17. uint8_t  tab6_LUAN[]="Temper:  .      "; //第二行顯示時鐘的模板

  18. uint8_t  tab7_LUAN[]="    :  :     :  ";//第一行顯示0123456789abcdef共16個字符
  19. uint8_t  tab8_LUAN[]="   Temper:  .   "; //第二行顯示時鐘的模板



  20. //數(shù)據(jù)處理函數(shù)
  21. /********************************************************************
  22. 函數(shù)功能:把一個BYTE輸入到LCD的數(shù)據(jù)引腳。
  23. 入口參數(shù):dat:要寫入LCD的數(shù)據(jù)。
  24. 返    回:無。
  25. 備    注:無。
  26. ********************************************************************/
  27. /*
  28. void SetLcdData(uint8_t dat)
  29. {
  30.     LCD_D0=((dat>>0)&0x01);
  31.     LCD_D1=((dat>>1)&0x01);
  32.     LCD_D2=((dat>>2)&0x01);
  33.     LCD_D3=((dat>>3)&0x01);
  34.     LCD_D4=((dat>>4)&0x01);
  35.     LCD_D5=((dat>>5)&0x01);
  36.     LCD_D6=((dat>>6)&0x01);
  37.     LCD_D7=((dat>>7)&0x01);
  38. }
  39. */
  40. /**///////////////////////Pino Electronics////////////////////////**/
  41. void SetLcdData(uint8_t dat)
  42. {
  43.     LCD_D0=((dat>>0)&0x01);
  44.     LCD_D1=((dat>>1)&0x01);
  45.     LCD_D2=((dat>>2)&0x01);
  46.     LCD_D3=((dat>>3)&0x01);
  47.     LCD_D4=((dat>>4)&0x01);
  48.     LCD_D5=((dat>>5)&0x01);
  49.     LCD_D6=((dat>>6)&0x01);
  50.     LCD_D7=((dat>>7)&0x01);
  51. }


  52. /********************************************************************
  53. 函數(shù)功能:從LCD的數(shù)據(jù)引腳讀取一個BYTE。
  54. 入口參數(shù):無。
  55. 返    回:dat:從LCD讀取的數(shù)據(jù)。
  56. 備    注:無。
  57. ********************************************************************/
  58. /*
  59. uint8_t GetLcdData(void)
  60. {
  61.         u8 dat=0;
  62.         if(LCD_D0) dat|=0x01;
  63.         if(LCD_D1) dat|=0x02;
  64.         if(LCD_D2) dat|=0x04;
  65.         if(LCD_D3) dat|=0x08;
  66.         if(LCD_D4) dat|=0x10;
  67.         if(LCD_D5) dat|=0x20;
  68.         if(LCD_D6) dat|=0x40;
  69.         if(LCD_D7) dat|=0x80;
  70.         return dat;
  71. }*/
  72. /**///////////////////////Pino Electronics////////////////////////**/

  73. /********************************************************************
  74. 函數(shù)功能:設(shè)置光標(biāo)位置和AC寄存器地址。
  75. 入口參數(shù):line:光標(biāo)所在的行數(shù),0表示第一行,1表示第二行;
  76.                                         index:光標(biāo)所在的列數(shù),0表示第一列。
  77. 返    回:無。
  78. 備    注:1602屏可顯示兩行,每行16個字符,地址分別為00H-0FH,40H-4FH。
  79. ********************************************************************/
  80. /*
  81. void Lcd1602SetAC(u8 line, u8 index)
  82. {
  83.         u8 base;
  84.         if (line==1)
  85.                 base=0xC0;
  86.         else if(line==0)
  87.                 base=0x80;
  88.         else
  89.                 return;
  90.         Lcd1602WriteCmd(base+index);                        //設(shè)置RAM地址
  91. }
  92. */
  93. /**///////////////////////Pino Electronics////////////////////////**/


  94. void LCD1602_LUAN_Write_com(uint8_t com)
  95. {                          
  96.         RS_LUAN=0;        RW_LUAN=0; EN_LUAN=0;  
  97. //        P0=com;
  98.         SetLcdData(com);
  99.         EN_LUAN=1;
  100.         delay_ms(5);//必要的延時
  101.         EN_LUAN=0;           //下降沿,LCD1602開始工作
  102. }

  103. void LCD1602_LUAN_Write_data(uint8_t date)
  104. {                        
  105.         RS_LUAN=1;        RW_LUAN=0; EN_LUAN=0;  
  106. //        P0=date;
  107.         SetLcdData(date);
  108.         EN_LUAN=1;                //先拉高
  109.         delay_ms(5);//必要的延時
  110.         EN_LUAN=0;       //下降沿,開始寫入有效數(shù)據(jù)
  111. }

  112. void LCD1602_LUAN_Init(void)
  113. {   
  114.       
  115.         LCD1602_LUAN_Write_com(0x38);  //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
  116.         LCD1602_LUAN_Write_com(0x0c);  //顯示開,關(guān)光標(biāo);0x08為關(guān)顯示
  117.         LCD1602_LUAN_Write_com(0x06);  //自動右移光標(biāo),0x04為左移光標(biāo)
  118.         LCD1602_LUAN_Write_com(0x80);  //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
  119.         LCD1602_LUAN_Write_com(0x01);  //清除LCD的顯示內(nèi)容
  120. }
  121.         
  122. void lcd1602_LUAN_dis1(void)        //顯示模板函數(shù)
  123. {
  124.         uint8_t i;        //定義一個變量i
  125.         LCD1602_LUAN_Write_com(0x80); //定義第一行
  126.          for(i=0;i<16;i++)         //從數(shù)組1調(diào)用16個字符
  127.          {
  128.                  LCD1602_LUAN_Write_data(tab1_LUAN[i]);  //調(diào)用第一行數(shù)組數(shù)據(jù)
  129.                  delay_ms(5); //延時5毫秒
  130.          }

  131.          LCD1602_LUAN_Write_com(0x80+0x40); //定義第二行
  132.          for(i=0;i<16;i++)//從數(shù)組調(diào)用16個字符
  133.          {
  134.                 LCD1602_LUAN_Write_data(tab2_LUAN[i]); //從數(shù)組2調(diào)用16個字符
  135.                  delay_ms(5); //延時5毫秒
  136.          }
  137. }
  138.         
  139.         
  140. void lcd1602_LUAN_dis2(void)        //顯示模板函數(shù)
  141. {
  142.         uint8_t i;        //定義一個變量i
  143.         LCD1602_LUAN_Write_com(0x80); //定義第一行
  144.          for(i=0;i<16;i++)         //從數(shù)組1調(diào)用16個字符
  145.          {
  146.                  LCD1602_LUAN_Write_data(tab3_LUAN[i]);  //調(diào)用第一行數(shù)組數(shù)據(jù)
  147.                  delay_ms(5); //延時5毫秒
  148.          }

  149.          LCD1602_LUAN_Write_com(0x80+0x40); //定義第二行
  150.          for(i=0;i<16;i++)//從數(shù)組調(diào)用16個字符
  151.          {
  152.                 LCD1602_LUAN_Write_data(tab4_LUAN[i]); //從數(shù)組2調(diào)用16個字符
  153.                  delay_ms(5); //延時5毫秒
  154.          }
  155. }
  156.         
  157.         
  158. void lcd1602_LUAN_dis3(void)        //顯示模板函數(shù)
  159. {
  160.         uint8_t i;        //定義一個變量i
  161.         LCD1602_LUAN_Write_com(0x80); //定義第一行
  162.          for(i=0;i<16;i++)         //從數(shù)組1調(diào)用16個字符
  163.          {
  164.                  LCD1602_LUAN_Write_data(tab7_LUAN[i]);  //調(diào)用第一行數(shù)組數(shù)據(jù)
  165.                  delay_ms(5); //延時5毫秒
  166.          }
  167.         LCD1602_LUAN_Write_com(0x80+0x40); //定義第二行
  168.          for(i=0;i<16;i++)//從數(shù)組調(diào)用16個字符
  169.          {
  170.                 LCD1602_LUAN_Write_data(tab8_LUAN[i]); //從數(shù)組2調(diào)用16個字符
  171.                 delay_ms(5); //延時5毫秒
  172.          }
  173. }
  174.         
  175.         
  176. //        /******************LCD1602顯示時間*********************/

  177. //        void lcd1602_dis2()         //顯示時間
  178. //        {
  179. //        LCD1602_dw(2,7,shi/10) ;          //第二行 的第8位裝秒的十位
  180. //        LCD1602_dw(2,8,shi%10) ;         //第二行 的第9位裝秒的個位        
  181. //        LCD1602_Write_com(0x80+0x40+9);//第二行 的第10個位置
  182. //        LCD1602_Write_data(':');//送一個:        
  183. //        LCD1602_dw(2,10,fen/10) ;          //第二行 的第14位裝秒的十位
  184. //        LCD1602_dw(2,11,fen%10) ;         //第二行 的第15位裝秒的個位
  185. //        LCD1602_Write_com(0x80+0x40+12);//第二行 的第13個位置
  186. //        LCD1602_Write_data(':');//送一個:
  187. //        LCD1602_dw(2,13,miao/10) ;          //第二行 的第14位裝秒的十位
  188. //        LCD1602_dw(2,14,miao%10) ;         //第二行 的第15位裝秒的個位
  189. //        }

  190. void LCD1602_LUAN_GPIO_Init(void)
  191. {
  192.         
  193.         GPIO_InitTypeDef GPIO_InitStructure;  //聲明一個結(jié)構(gòu)體變量,用來初始化GPIO
  194.         RCC_APB2PeriphClockCmd(LED_PORT_RCC_LUAN,ENABLE);//* 開啟GPIO時鐘
  195.         /*  配置GPIO的模式和IO口 */
  196.         GPIO_InitStructure.GPIO_Pin=LED_PIN1_LUAN;          //選擇你要設(shè)置的IO口---E端口
  197.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//選擇你要設(shè)置的IO模式
  198.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//設(shè)置速度
  199.         GPIO_Init(LED_PORT1_LUAN,&GPIO_InitStructure);                /* 初始化GPIO ---E端口*/
  200.         /************配置端口F***************/
  201.         GPIO_InitStructure.GPIO_Pin=LED_PIN2_LUAN;          //選擇你要設(shè)置的IO口---F端口
  202.         GPIO_Init(LED_PORT2_LUAN,&GPIO_InitStructure);                /* 初始化GPIO ----F端口*/


  203. }





  204. /************************************************************
  205. 使用


  206. void main(void)
  207. {
  208.         LCD1602_GPIO_Init();
  209.     LCD1602_Init();
  210.     lcd1602_dis1();
  211. }


  212. **********************************************************/




  213. /********************************************************************
  214. 函數(shù)功能:設(shè)置光標(biāo)位置和AC寄存器地址。
  215. 入口參數(shù):line:光標(biāo)所在的行數(shù),0表示第一行,1表示第二行;
  216.                                         index:光標(biāo)所在的列數(shù),0表示第一列。
  217.                                         date :數(shù)字  數(shù)字變?yōu)閷?yīng)字符需要 |0x30即可 +0x30
  218. 返    回:無。
  219. 備    注:1602屏可顯示兩行,每行16個字符,地址分別為00H-0FH,40H-4FH。
  220. 特定位置顯示特定數(shù)值
  221. ********************************************************************/
  222. void Lcd1602_LUAN_SetAC_Date(u8 line, u8 index,u8 date)
  223. {
  224.         u8 base;
  225.         if (line==1)
  226.                 base=0xC0;
  227.         else if(line==0)
  228.                 base=0x80;
  229.         else
  230.                 return;
  231.         LCD1602_LUAN_Write_com(base+index);                        //設(shè)置RAM地址
  232.         LCD1602_LUAN_Write_data(date);               //輸入要顯示的數(shù)據(jù)
  233. }


  234. /*********************************************************
  235. 特定位置顯示特定數(shù)值
  236. ************************************************************/


  237. //第一行的界面設(shè)置函數(shù)
  238. /********************************************************************
  239. 函數(shù)功能:設(shè)置光標(biāo)位置和AC寄存器地址。第一行的界面設(shè)置函數(shù)
  240. 入口參數(shù):                        index:光標(biāo)所在的列數(shù)。
  241.                                         date :數(shù)字  數(shù)字變?yōu)閷?yīng)字符需要 |0x30即可 +0x30
  242. 返    回:無。
  243. 備    注:1602屏可顯示兩行,每行16個字符,地址分別為00H-0FH,40H-4FH。
  244. 特定位置顯示特定數(shù)值
  245. ********************************************************************/
  246. void LCD1602_LUAN_Display_line1(u8 index,u8 date)
  247. {
  248.         LCD1602_LUAN_Write_com(0x80+index);                        //設(shè)置RAM地址
  249.         LCD1602_LUAN_Write_data(date);               //輸入要顯示的數(shù)據(jù)        
  250.         delay_ms(5); //延時5毫秒
  251. }

  252. //第二行的界面設(shè)置函數(shù)
  253. /********************************************************************
  254. 函數(shù)功能:設(shè)置光標(biāo)位置和AC寄存器地址。第二行的界面設(shè)置函數(shù)
  255. 入口參數(shù):                        index:光標(biāo)所在的列數(shù)。
  256.                                         date :數(shù)字  數(shù)字變?yōu)閷?yīng)字符需要 |0x30即可 +0x30
  257. 返    回:無。
  258. 備    注:1602屏可顯示兩行,每行16個字符,地址分別為00H-0FH,40H-4FH。
  259. 特定位置顯示特定數(shù)值
  260. ********************************************************************/
  261. void LCD1602_LUAN_Display_line2(u8 index,u8 date)
  262. {
  263.         LCD1602_LUAN_Write_com(0xC0+index);                        //設(shè)置RAM地址
  264.         LCD1602_LUAN_Write_data(date);               //輸入要顯示的數(shù)據(jù)        
  265.         delay_ms(5); //延時5毫秒
  266. }





  267. //自己做的穩(wěn)定的不會閃爍的界面1
  268. void LCD1602_LUAN_Interface_1(void)
  269. {
  270.         //第一行
  271.         LCD1602_LUAN_Display_line1(0,'C');
  272.         LCD1602_LUAN_Display_line1(1,'0');
  273.         LCD1602_LUAN_Display_line1(2,':');        
  274.         LCD1602_LUAN_Display_line1(4,'.');
  275.         LCD1602_LUAN_Display_line1(6,'V');
  276.         LCD1602_LUAN_Display_line1(7,' ');
  277.         
  278.         LCD1602_LUAN_Display_line1(8,'C');
  279.         LCD1602_LUAN_Display_line1(9,'1');
  280.         LCD1602_LUAN_Display_line1(10,':');        
  281.         LCD1602_LUAN_Display_line1(12,'.');
  282.         LCD1602_LUAN_Display_line1(14,'V');
  283.         LCD1602_LUAN_Display_line1(15,' ');
  284.         
  285.         //第2行
  286.         LCD1602_LUAN_Display_line2(0,'C');
  287.         LCD1602_LUAN_Display_line2(1,'2');
  288.         LCD1602_LUAN_Display_line2(2,':');        
  289.         LCD1602_LUAN_Display_line2(4,'.');
  290.         LCD1602_LUAN_Display_line2(6,'V');
  291.         LCD1602_LUAN_Display_line2(7,' ');
  292.         
  293.         LCD1602_LUAN_Display_line2(8,'C');
  294.         LCD1602_LUAN_Display_line2(9,'3');
  295.         LCD1602_LUAN_Display_line2(10,':');        
  296.         LCD1602_LUAN_Display_line2(12,'.');
  297.         LCD1602_LUAN_Display_line2(14,'V');
  298.         LCD1602_LUAN_Display_line2(15,' ');
  299.                         
  300. }

  301. //自己做的穩(wěn)定的不會閃爍的界面2
  302. void LCD1602_LUAN_Interface_2(void)
  303. {
  304.         uint8_t i=0;
  305.         //第一行
  306.         LCD1602_LUAN_Display_line1(0,'C');
  307.         LCD1602_LUAN_Display_line1(1,'4');
  308.         LCD1602_LUAN_Display_line1(2,':');        
  309.         LCD1602_LUAN_Display_line1(4,'.');
  310.         LCD1602_LUAN_Display_line1(6,'V');
  311.         LCD1602_LUAN_Display_line1(7,' ');
  312.         
  313.         LCD1602_LUAN_Display_line1(8,'C');
  314.         LCD1602_LUAN_Display_line1(9,'5');
  315.         LCD1602_LUAN_Display_line1(10,':');        
  316.         LCD1602_LUAN_Display_line1(12,'.');
  317.         LCD1602_LUAN_Display_line1(14,'V');
  318.         LCD1602_LUAN_Display_line1(15,' ');
  319.         
  320.         //第2行
  321.         /*
  322.         LCD1602_Display_line1(0,'C');
  323.         LCD1602_Display_line1(1,'2');
  324.         LCD1602_Display_line1(2,':');        
  325.         LCD1602_Display_line1(4,'.');
  326.         LCD1602_Display_line1(6,'V');
  327.         LCD1602_Display_line1(7,' ');
  328.         
  329.         LCD1602_Display_line1(8,'C');
  330.         LCD1602_Display_line1(9,'3');
  331.         LCD1602_Display_line1(10,':');        
  332.         LCD1602_Display_line1(12,'.');
  333.         LCD1602_Display_line1(14,'V');
  334.         LCD1602_Display_line1(15,' ');
  335.         */
  336.         //第2行
  337.         LCD1602_LUAN_Write_com(0x80+0x40); //定義第二行
  338.          for(i=0;i<16;i++)//從數(shù)組調(diào)用16個字符
  339.          {
  340.                 LCD1602_LUAN_Write_data(tab4_LUAN[i]); //從數(shù)組2調(diào)用16個字符
  341.                 delay_ms(5); //延時5毫秒
  342.          }
  343. }

  344. //自己做的穩(wěn)定的不會閃爍的界面3
  345. void LCD1602_LUAN_Interface_3(void)
  346. {
  347.                 //第一行
  348.         LCD1602_LUAN_Display_line1(0,'C');
  349.         LCD1602_LUAN_Display_line1(1,'0');
  350.         LCD1602_LUAN_Display_line1(2,':');        
  351.         LCD1602_LUAN_Display_line1(4,'.');
  352.         LCD1602_LUAN_Display_line1(6,'V');
  353.         LCD1602_LUAN_Display_line1(7,' ');
  354.         
  355.         LCD1602_LUAN_Display_line1(8,'C');
  356.         LCD1602_LUAN_Display_line1(9,'1');
  357.         LCD1602_LUAN_Display_line1(10,':');        
  358.         LCD1602_LUAN_Display_line1(12,'.');
  359.         LCD1602_LUAN_Display_line1(14,'V');
  360.         LCD1602_LUAN_Display_line1(15,' ');
  361.         
  362.         //第2行
  363.         LCD1602_LUAN_Display_line2(0,'C');
  364.         LCD1602_LUAN_Display_line2(1,'2');
  365.         LCD1602_LUAN_Display_line2(2,':');        
  366.         LCD1602_LUAN_Display_line2(4,'.');
  367.         LCD1602_LUAN_Display_line2(6,'V');
  368.         LCD1602_LUAN_Display_line2(7,' ');
  369.         
  370.         LCD1602_LUAN_Display_line2(8,'C');
  371.         LCD1602_LUAN_Display_line2(9,'3');
  372.         LCD1602_LUAN_Display_line2(10,':');        
  373.         LCD1602_LUAN_Display_line2(12,'.');
  374.         LCD1602_LUAN_Display_line2(14,'V');
  375.         LCD1602_LUAN_Display_line2(15,' ');

  376. }
復(fù)制代碼

全部資料51hei下載地址:
LCD1602實(shí)驗(yàn)亂口.7z (356.21 KB, 下載次數(shù): 19)

評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:328014 發(fā)表于 2020-11-1 04:08 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 高清一区二区三区 | 看一级毛片 | 亚洲成人观看 | 国产日韩欧美激情 | 久久久久久91 | 成人综合视频在线观看 | 爱草在线 | 日韩一区二区三区在线 | 日本男人天堂 | 国产精品网址 | 亚洲综合一区二区三区 | 免费h视频 | 国产精品爱久久久久久久 | 欧美区日韩区 | 97久久国产 | 国产乱人伦 | 男女av| 久久精品中文 | 久久精品成人热国产成 | 国产特一级黄色片 | 狠狠的日 | 在线观看中文字幕亚洲 | 久久av网 | 久久久激情 | 精品国产乱码久久久久久88av | 黄色片亚洲 | 超级乱淫av片免费播放 | 一区二区久久电影 | 五月网婷婷 | 日韩精品一区二 | 日韩av在线一区二区三区 | 中文字幕一区二区三 | 97色伦网 | 欧美一级片在线看 | 国产免费人成xvideos视频 | 欧美精品一二三区 | 久久成人精品视频 | 伊人久麻豆社区 | 日韩视频在线观看一区二区 | 久久婷婷av| 国产福利在线视频 |