完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
求大神帮忙看看这个程序为什么实现不了功能呢
头文件:1602.h #ifndef __1602_H #define __1602_H #include "sys.h" #include "stdlib.h" #define LCD1602_RS PCout(8) #define LCD1602_RW PCout(7) #define LCD1602_E PCout(6) #define DATAOUT(x) GPIOA->ODR=(GPIOA->ODR&0xff00)|(x&0x00ff); void lcd1602_Init(void); void lcd1602_Reset(void); void Write_com(u8 COM); void Write_DATA(u8 date); void lcd162a_Display(u8 dd); void lcd162a_LocateXY(u8 posx,u8 posy); void lcd162a_DispOneChar(u8 x,u8 y,u8 Wdata); void lcd162a_ePutstr(u8 x,u8 y,u8 *ptr); void lcd162a_cls(void); #endif .c文件: #include "1602.h" #include "sys.h" #include "delay.h" #include "stdio.h" #include "stdlib.h" void lcd162a_cls(void) { Write_com(0x01); } void lcd1602_Init(void) { RCC->APB2ENR|=1<<3; RCC->APB2ENR|=1<<4; GPIOA->CRL&=0X00000000; GPIOA->CRL|=0X33333333; GPIOA->ODR=0XFF; GPIOC->CRH&=0XFFFFFF00; GPIOC->CRL&=0X00FFFFFF; GPIOC->CRH|=0X00000033; GPIOC->CRL|=0X33000000; GPIOC->ODR|=0X03C0; lcd1602_Reset(); lcd162a_cls(); } void lcd1602_Reset(void) { Write_com(0x38); delay_ms(20); Write_com(0x38); delay_ms(20); Write_com(0x38); delay_ms(20); Write_com(0x38); Write_com(0x08); lcd162a_cls(); Write_com(0x06); Write_com(0x0c); } void Write_com(u8 COM) { delay_ms(2); LCD1602_RS=0; LCD1602_RW=0; LCD1602_E=1; DATAOUT(COM); delay_us(2); LCD1602_E=0; } void Write_DATA(u8 date) { delay_ms(2); LCD1602_RS=1; LCD1602_RW=0; LCD1602_E=1; DATAOUT(date); delay_us(2); LCD1602_E=0; } void lcd162a_Display(u8 dd) //ÏÔʾ { u8 i=0; for(i=0;i<16;i++) { lcd162a_DispOneChar(i,1,dd++); dd &=0x7f; if (dd<32) dd=32; } } void lcd162a_LocateXY(u8 posx,u8 posy) //ÏÔʾ¹â±êλÖà { u8 temp; temp=posx & 0xf; posy &= 0x01; if(posy) temp |=0x40; temp |=0x80; Write_com(temp); } void lcd162a_DispOneChar(u8 x,u8 y,u8 Wdata) //ÔÚÖƶ¨Î»ÖÃÏÔʾ { lcd162a_LocateXY(x,y); Write_DATA(Wdata); } void lcd162a_ePutstr(u8 x,u8 y,u8 *ptr) //ÏÔʾ×Ö·û { u8 i,l=0; while (ptr[l] >31) { l++; }; for (i=0;i lcd162a_DispOneChar(x++,y,ptr); if ( x == 16 ) { x = 0; y ^= 1; } } } 文件名:main.c #include "sys.h" #include "usart.h" #include "delay.h" #include "1602.h" #include "stdio.h" u8 *p1="Hello,world."; int main(void) { u8 temp=0; STM32_Clock_Init(9); delay_init(72); uart_init(72,9600); lcd1602_Init(); lcd162a_cls(); lcd162a_ePutstr(0,0,p1); delay_ms(1000); lcd162a_cls(); while(1) { temp &= 0x7f; if (temp<32)temp=32; lcd162a_Display( temp++ ); delay_ms(400); } } 想实现1602显示Hello,world.但是程序下进去没有反应,芯片是stm32f103rbt6的。 希望大家帮帮忙 |
|
相关推荐
5 个讨论
|
|
主要看下LCD1602的读写时序,延时很重要呢。
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
2005 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1858 浏览 3 评论
4442 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2007 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2513 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 01:02 , Processed in 0.622195 second(s), Total 61, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号