高中生
最后登录1970-1-1
在线时间 小时
注册时间2014-11-16
|
本帖最后由 dyg 于 2015-4-18 21:09 编辑
1602写进去的数自动加1,本来我要现实220,但是显示出来的是331,哪位大神遇到过这种问题?
main函数
a =ADC_ConvertedValueLocal*100.000; /ad采集过来的数/ ge=a%10;
shi=a%100/10;
bai=a/100;
d[0]=bai+0x30; /这一步正确,显示2/
d[1]=shi+0x30; /这一步正确,显示2/
d[2]=ge+0x30; /这一步正确,显示0/
for(num=0;num<4;num++)
{
Lcd1602WriteData(d[num]);
DelayMs(100);
} 经过for循环,却在显示屏上显示331
求大神指点!!!!!!
1602.c文件
#include "lcd1602.h"
#include "delay.h"
void LcdIo1602(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_10|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);
}
void Lcd1602Write(u8 data)
{
u8 i = 0;
u8 operation = 0;
for(i = 0; i < 8; i++)
{
if((data>>i) & 0x01)
operation = 1;
else
operation = 0;
switch(i)
{
case 0:
if(operation)
GPIO_SetBits(GPIOPORT, GPIO_Pin_10);
else
GPIO_ResetBits(GPIOPORT, GPIO_Pin_10);
break;
case 1:
if(operation)
GPIO_SetBits(GPIOPORT, GPIO_Pin_1);
else
GPIO_ResetBits(GPIOPORT, GPIO_Pin_1);
break;
case 2:
if(operation)
GPIO_SetBits(GPIOPORT, GPIO_Pin_2);
else
GPIO_ResetBits(GPIOPORT, GPIO_Pin_2);
break;
case 3:
if(operation)
GPIO_SetBits(GPIOPORT, GPIO_Pin_3);
else
GPIO_ResetBits(GPIOPORT, GPIO_Pin_3);
break;
case 4:
if(operation)
GPIO_SetBits(GPIOPORT, GPIO_Pin_4);
else
GPIO_ResetBits(GPIOPORT, GPIO_Pin_4);
break;
case 5:
if(operation)
GPIO_SetBits(GPIOPORT, GPIO_Pin_5);
else
GPIO_ResetBits(GPIOPORT, GPIO_Pin_5);
break;
case 6:
if(operation)
GPIO_SetBits(GPIOPORT, GPIO_Pin_6);
else
GPIO_ResetBits(GPIOPORT, GPIO_Pin_6);
break;
case 7:
if(operation)
GPIO_SetBits(GPIOPORT, GPIO_Pin_7);
else
GPIO_ResetBits(GPIOPORT, GPIO_Pin_7);
break;
default:
break;
}
}
}
void Lcd1602WriteData(u8 date)
{
LCD1602_EN_HIGH;
LCD1602_RS_HIGH;
LCD1602_RW_LOW;
Lcd1602Write(date);
DelayMs(100);
LCD1602_EN_LOW;
}
void Lcd1602WriteCommand(u8 com)
{
LCD1602_EN_HIGH;
LCD1602_RS_LOW;
LCD1602_RW_LOW;
Lcd1602Write(com);
DelayMs(100);
LCD1602_EN_LOW;
}
void Lcd1602Init(void)
{ Lcd1602WriteCommand(0x38);
Lcd1602WriteCommand(0x38);
Lcd1602WriteCommand(0x38);
Lcd1602WriteCommand(0x01);
Lcd1602WriteCommand(0x0c);
Lcd1602WriteCommand(0x06);
Lcd1602WriteCommand(0x80);
}
|
|