weixin_58857297 2024-05-07 21:26 采纳率: 87.5%
浏览 3
已结题

求用stm32f103c6t6在lcd1206上显示Door is open和password:

求用stm32f103c6t6在lcd1206上显示Door is open和password:
用keil来写,ch430串口下载程序,要完整代码mian和lcd.c这些文件都要,还有通信方式,我一个会的都没有,可以这个文件发的最好,酬金可以商量

  • 写回答

9条回答 默认 最新

  • 妄北y 嵌入式领域优质创作者 2024-05-07 21:27
    关注

    以下参考免费微信小程序:皆我百晓生 作答,并由妄北y整理回复。

    我可以为你提供一个基于STM32F103C6T6和LCD1602的示例代码,用于在LCD上显示"Door is open"和"password:"。请注意,这只是一个示例,可能需要根据您的硬件和需求进行调整。

    首先,确保您已经正确连接了STM32F103C6T6和LCD1602。以下是连接方式:

    • LCD VSS 连接到 GND
    • LCD VDD 连接到 5V
    • LCD RS 连接到 PA0
    • LCD EN 连接到 PA1
    • LCD D4 连接到 PA2
    • LCD D5 连接到 PA3
    • LCD D6 连接到 PA4
    • LCD D7 连接到 PA5

    接下来,创建一个名为main.c的文件,包含以下代码:

    #include "stm32f10x.h"
    #include "lcd.h"
    
    int main(void)
    {
        // 初始化LCD
         lcd_init();
    
        // 设置显示模式
         lcd_display(0x0C);
    
         // 清除屏幕
         lcd_clear();
    
         // 设置显示位置
         lcd_setpos(0x00);
    
         // 显示 "Door is open"
         lcd_putstr("Door is open");
    
         // 设置显示位置
         lcd_setpos(0x40);
    
         // 显示 "password:"
         lcd_putstr("password:");
    
         while(1)
         {
             // 无限循环
         }
    }
    

    然后,创建一个名为lcd.h的文件,包含以下代码:

    #ifndef _LCD_H
    #define _LCD_H
    
    #include "stm32f10x.h"
    
    #define LCD_RS_PA0       0
    #define LCD_EN_PA1       1
    #define LCD_DATA_PORT    GPIOA
    #define LCD_DATA_PORT_CLK RCC_APB2Periph_GPIOA
    
    #define lcd_cmd(x)     (LCD_DATA_PORT->GPIO_ODR=((LCD_DATA_PORT->GPIO_ODR)&((~(x))|(0x0F))))//发送指令或数据
    #define lcd_data(x)     (LCD_DATA_PORT->GPIO_ODR=((LCD_DATA_PORT->GPIO_ODR)&((~(x))|(0xF0))))//发送指令或数据
    
    void lcd_init(void);
    void lcd_cmd_write(unsigned char cmd);
    void lcd_data_write(unsigned char dat);
    void lcd_setpos(unsigned char x, unsigned char y);
    void lcd_clear(void);
    void lcd_display(unsigned char bit);
    void lcd_putstr(unsigned char *str);
    
    #endif /* _LCD_H */
    

    接着,创建一个名为lcd.c的文件,包含以下代码:

    #include "lcd.h"
    
    void lcd_init(void)
    {
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
    
        lcd_cmd(0x38); // 8位数据接口,2行显示,5x7点阵
        lcd_cmd(0x39); // 8位数据接口,2行显示,5x7点阵
        lcd_cmd(0x14); // 启动显示
        lcd_cmd(0x0C); // 显示开,光标关
        lcd_cmd(0x06); // 写入新数据后,地址指针增1
        lcd_cmd(0x01); // 清屏
    }
    
    void lcd_cmd_write(unsigned char cmd)
    {
        lcd_setpos(0x00, 0x00);
        lcd_cmd(cmd);
    }
    
    void lcd_data_write(unsigned char dat)
    {
        lcd_setpos(0x00, 0x01);
        lcd_data(dat);
    }
    
    void lcd_setpos(unsigned char x, unsigned char y)
    {
        if(y == 0x00)
        {
            lcd_cmd_write(0x80 | x); // 显示第一行
        }
        else if(y == 0x01)
        {
            lcd_cmd_write(0x80 | x | 0x40); // 显示第二行
        }
    }
    
    void lcd_clear(void)
    {
        lcd_cmd_write(0x01);
    }
    
    void lcd_display(unsigned char bit)
    {
        lcd_cmd_write(bit);
    }
    
    void lcd_putstr(unsigned char *str)
    {
        unsigned char i = 0;
        while(str[i] != '\0')
        {
            lcd_data_write(str[i]);
            i++;
        }
    }
    

    最后,使用Keil uVision编译并使用CH430串口下载程序到

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 5月15日
  • 已采纳回答 5月7日
  • 修改了问题 5月7日
  • 创建了问题 5月7日

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路