完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
如题,我用STM32f103c8t6来控制qc1602a的显示,可是什么都没有。给出源代码还请大神看看,跪谢
还有,显示器板子上的V0端口我给接地了。说是对比度控制电压,不知道有影响没有 #include "stm32f10x.h" /***********LED下管脚定义及初始化**************/ // 接线说明 端口 接线颜色 // VSS GND 绿 // VDD V3.3 蓝 // RS PB0 灰 // RW PB1 白 // E PB2 黑 // D0 PA0 褐 // D1 PA1 红 // D2 PA2 橙 // D3 PA3 黄 // D4 PA4 绿 // D5 PA5 蓝 // D6 PA6 紫 // D7 PA7 灰 // A V3.3 白 // K GND 黑 /************************************************/ /**********宏定义*****************/ #define uchar unsigned char #define uint unsigned int /******定义函数****************/ void LCD_init(void);//初始化函数 void LCD_write_command(uchar command);//写指令函数 void LCD_write_data(uchar dat);//写数据函数 void LCD_disp_char(uchar x,uchar y,uchar dat);//在某个屏幕位置上显示一个字符,X(0-16),y(1-2) void delay_n40us(uint n);//延时函数 void GPIO_Configuration(void);//管脚初始化 void Data_Transfer(uchar data);//基本输出传输函数 /*********主函数*****************/ int main(void) { LCD_init(); LCD_disp_char(0,1,'A'); while(1); } //*******初始化函数*************** void LCD_init(void) { GPIO_Configuration(); LCD_write_command(0x38);//设置8位格式,2行,5x7 LCD_write_command(0x0c);//整体显示,关光标,不闪烁 LCD_write_command(0x06);//设定输入方式,增量不移位 LCD_write_command(0x01);//清除屏幕显示 delay_n40us(300);//实践证明,我的LCD1602上,用for循环200次就能可靠完成清屏指令。 } /********写指令函数************/ void LCD_write_command(uchar dat) { Data_Transfer(dat); //LCD_RS=0;//指令 GPIO_ResetBits(GPIOB,GPIO_Pin_0); //LCD_RW=0;//写入 GPIO_ResetBits(GPIOB,GPIO_Pin_1); //LCD_E=1;//允许 GPIO_SetBits(GPIOB,GPIO_Pin_2); //LCD_E=0; GPIO_ResetBits(GPIOB,GPIO_Pin_2); delay_n40us(300);//实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。 } /********写数据函数*************/ void LCD_write_data(uchar dat) { Data_Transfer(dat); //LCD_RS=1;//数据 GPIO_SetBits(GPIOB,GPIO_Pin_0); //LCD_RW=0;//写入 GPIO_ResetBits(GPIOB,GPIO_Pin_1); //LCD_E=1;//允许 GPIO_SetBits(GPIOB,GPIO_Pin_2); //LCD_E=0; GPIO_ResetBits(GPIOB,GPIO_Pin_2); delay_n40us(300); } /*******显示一个字符函数*********/ void LCD_disp_char(uchar x,uchar y,uchar dat) { uchar address; if(y==1) address=0x80+x; else address=0xc0+x; LCD_write_command(address); LCD_write_data(dat); } /********延时函数***************/ void delay_n40us(uint n) { uint i; uchar j; for(i=n;i>0;i--) for(j=0;j<2;j++); //在这个延时循环函数中我只做了2次循环, } //实践证明我的LCD1602上普通的指令只需1次循环就能可靠完成。 /**********管脚初始化***********/ void GPIO_Configuration() { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /*数据传输管脚定义初始化*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3 |GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /*显示控制管脚定义初始化*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); } /*********基本输出传输函数*******/ void Data_Transfer(uchar data) { GPIO_ResetBits(GPIOA,GPIO_Pin_All); GPIO_SetBits(GPIOA,data); } |
|
相关推荐
1 个讨论
|
|
|
请问你的问题解决了吗
我遇到和你相同的问题 |
|
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 20:47 , Processed in 0.707819 second(s), Total 58, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
24094