找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3904|回复: 3
收起左侧

stm32单片机驱动1602显示的源程序

[复制链接]
ID:339323 发表于 2018-7-11 01:54 | 显示全部楼层 |阅读模式
注意供电电压,测试时因为一直用3.3V所以导致无显示,浪费大量时间。且对比度引脚接地

STM32单片机源程序如下:
  1. #include "lcd1602.h"
  2. #include "delay.h"
  3.                              
  4. #define DELAY_2N     0

  5. //==================================================
  6. void LCD_init(void)
  7. {
  8.     /*********************液晶使用的I/O口初始化**************************/
  9.                 GPIO_InitTypeDef GPIO_InitStructure;
  10.        
  11.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  12.   
  13.     GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_1 | GPIO_Pin_2| GPIO_Pin_0| GPIO_Pin_3
  14.                                                                                                                                         | GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7
  15.                                                                                                                                         | GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_10;
  16.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  17.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  18.     GPIO_Init(GPIOC, &GPIO_InitStructure);
  19.        
  20.     LCD_RW(0);                        //读写位直接低电平,只写不读

  21.     /*********************液晶初始化**************************/        
  22.     delay_us(340);
  23.                 LCD_RS(0);
  24.    
  25.     LCD_write_cmd(0x38);          // 8bit显示模式,2行,5x7字体
  26.     delay_ms(4);  
  27.     LCD_write_cmd(0x08);         // 显示关闭
  28.     delay_ms(4);
  29.     LCD_write_cmd(0x01);         // 显示清屏
  30.     delay_ms(4);
  31.     LCD_write_cmd(0x06);         // 显示光标移动设置
  32.     delay_ms(4);
  33.     LCD_write_cmd(0x0c);         // 显示开,光标开,光标闪烁
  34.     delay_ms(4);
  35.                 LCD_write_cmd(0x01);         //清屏
  36.                 delay_ms(4);
  37. }
  38. /*--------------------------------------------------
  39. 函数说明:写命令到液晶


  40. ---------------------------------------------------*/
  41. void LCD_write_cmd(unsigned char cmd)
  42. {
  43.     LCD_RS(0);
  44.     LCD_Write_byte(cmd);
  45.     delay_us(340);
  46. }
  47. /*--------------------------------------------------
  48. 函数说明:写数据到液晶


  49. ---------------------------------------------------*/
  50. void LCD_write_data(unsigned char w_data)
  51. {
  52.     LCD_RS(1);
  53.     LCD_Write_byte(w_data);
  54.     delay_us(340);
  55. }
  56. /*--------------------------------------------------
  57. 函数说明:写4bit到液晶
  58. --------------------------------------------------*/
  59. void LCD_Write_byte(unsigned char num)
  60. {  
  61.                 if (num&0x01)
  62.                                 data0(1);
  63.                 else
  64.                                 data0(0);

  65.                 if (num&0x02)
  66.                                 data1(1);
  67.                 else
  68.                                 data1(0);

  69.                 if (num&0x04)
  70.                                 data2(1);
  71.                 else
  72.                                 data2(0);

  73.                 if (num&0x08)
  74.                                 data3(1);
  75.                 else
  76.                                 data3(0);

  77.                 if (num&0x10)
  78.                                 data4(1);
  79.                 else
  80.                                 data4(0);

  81.                 if (num&0x20)
  82.                                 data5(1);
  83.                 else
  84.                                 data5(0);

  85.                 if (num&0x40)
  86.                                 data6(1);
  87.                 else
  88.                                 data6(0);
  89.                
  90.                 if (num&0x80)
  91.                                 data7(1);
  92.                 else
  93.                                 data7(0);
  94.                 delay_us(340);
  95.     LCD_EN(1);
  96.     delay_us(340);
  97.     LCD_EN(0);
  98.     delay_us(340);
  99. }

  100. /*----------------------------------------------------
  101. LCD_set_xy        : 设置LCD显示的起始位置
  102. 输入参数:x、y    : 显示字符串的位置,X:0-15,Y:0-1               
  103. -----------------------------------------------------*/
  104. void LCD_set_xy( unsigned char x, unsigned char y )
  105. {
  106.     unsigned char address = 0;
  107.     if (y==0)
  108.     {
  109.         address=0x80+x;
  110.     }
  111.     else
  112.     {
  113.         address=0xc0+x;
  114.     }
  115. //                y ? (address=0xc0+x): (address=0x80+x) ;
  116.     LCD_write_cmd(address);
  117. }
  118. /*---------------------------------------------------
  119. LCD_write_string  : 英文字符串显示函数
  120. 输入参数:*s      :英文字符串指针;
  121.           X、Y    : 显示字符串的位置               
  122. ---------------------------------------------------*/
  123. void LCD_write_string(unsigned char X,unsigned char Y, char *s)
  124. {
  125.     LCD_set_xy(X,Y);   
  126.     while (*s)
  127.     {
  128.         LCD_write_data(*s);
  129.         s++;
  130.     }
  131. }

  132. //=======================================================
  133. void LCD_wstring(unsigned char X,unsigned char *s)
  134. {
  135.     LCD_write_cmd(X);   
  136.     while (*s)
  137.     {
  138.         LCD_write_data(*s);
  139.         s++;
  140.     }
  141. }
  142. //void delay(vu32 cnt)
  143. //{
  144. //  cnt <<= DELAY_2N;

  145. //  while (cnt--);
  146. //}
复制代码

所有资料51hei提供下载:

lcd1602.rar (301.67 KB, 下载次数: 99)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:463898 发表于 2019-1-17 18:15 | 显示全部楼层
你好,请问如何显示一个变量的值
回复

使用道具 举报

ID:133894 发表于 2019-6-2 20:55 | 显示全部楼层
挺好的额
回复

使用道具 举报

ID:96478 发表于 2019-11-5 15:41 | 显示全部楼层
下来看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表