单片机数据存储,我哪少写呢?单片机是AT89S52.用1602显示。

//内部等待函数**************************************************************************uns... //内部等待函数**************************************************************************
unsigned char LCD_Wait(void)
{
LcdRs=0;
LcdRw=1; _nop_();
LcdEn=1; _nop_();

LcdEn=0;
return DBPort;
}
//向LCD写入命令或数据************************************************************
#define LCD_COMMAND 0 // Command
#define LCD_DATA 1 // Data
#define LCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING 0x02 // 光标返回原点
void LCD_Write(bit style, unsigned char input)
{
LcdEn=0;
LcdRs=style;
LcdRw=0; _nop_();
DBPort=input; _nop_();//注意顺序
LcdEn=1; _nop_();//注意顺序
LcdEn=0; _nop_();
LCD_Wait();
}

//设置显示模式************************************************************
#define LCD_SHOW 0x04 //显示开
#define LCD_HIDE 0x00 //显示关

#define LCD_CURSOR 0x02 //显示光标
#define LCD_NO_CURSOR 0x00 //无光标

#define LCD_FLASH 0x01 //光标闪动
#define LCD_NO_FLASH 0x00 //光标不闪动

void LCD_SetDisplay(unsigned char DisplayMode)
{
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
}

//设置输入模式************************************************************
#define LCD_AC_UP 0x02
#define LCD_AC_DOWN 0x00 // default

#define LCD_MOVE 0x01 // 画面可平移
#define LCD_NO_MOVE 0x00 //default

void LCD_SetInput(unsigned char InputMode)
{
LCD_Write(LCD_COMMAND, 0x04|InputMode);
}

//初始化LCD************************************************************
void LCD_Initial()
{
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动
}

//液晶字符输入的位置************************
void GotoXY(unsigned char x, unsigned char y)
{
if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);
if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));
}

//将字符输出到液晶显示

void Print(unsigned char *str)
{
while(*str!='\0')
{
LCD_Write(LCD_DATA,*str);
str++;
}
}

void main()
{for(i=0;i<10;i++)//循环9次
{//间隔2秒显示时间
s=2;m=0;
j=s*0.5+m*27.5;
sdelay(j);
show_time();
save_temp[h]=temp_value;//存储9组时间
save_temp[++h]='\0';
h++;
}
Print(save_temp);//显示9组数据
}
展开
 我来答
r123025
2012-04-28
知道答主
回答量:7
采纳率:0%
帮助的人:3.7万
展开全部
没调用LCD_Initial()初始化 还有没有调用 LCD_SetInput(),LCD怎么知道从哪里开始写数据呢?还有这个 show_time();是什么啊没看到
追问
加上初始化, LCD_SetInput()你定义是什么意思的函数啊?
show_time();是显示数据的一个子程序。
追答
LCD_SetInput(),这是你定义的,不知道什么用途的,还有好像没有调用了 GotoXY(),应该是光标指示位置吧,就是你想LCD从什么位置开始写数据,你不调用,他不知道从什么位置开始写数据啊
桃花雨露7
2012-04-21 · 超过13用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:10.5万
展开全部
你这个程序能显示!你真是个天才了,实话,这个程序有很多错误的地方(可能程序没贴完整)
第一处:for(i=0;i<10;i++)//循环9次**************这里循环的是10次
第二处: s=2;m=0; j=s*0.5+m*27.5;************这里不知你是怎么做的,j 成固定数值了
第三处:show_time();********不知你贴完整程序没有,这个函数呢?
。。。:save_temp[h]=temp_value这些变量不知哪来的,好像没定义吧
。。。:最严重的就是,在main函数里面居然没有LCD1602的初始化函数,少了这步,1602怎么可能还会显示。
更多追问追答
追问
程序确实没有贴完整,我也没表述清楚。我选的单片机是AT89S52,我想让它存储采集到的温度数据——temp_value采集到的温度,再把采集到温度存放在save_temp[h]里。用Print(save_temp);显数据。
uchar temp_value; //温度值
uchar xdata save_temp[]={0};
我不知道这单片机能不能实现数据存储功能,请给我引引路。
追答
AT89S52这单片机有内部RAM,存储少量数据,没有问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
71590537
2012-04-21 · TA获得超过102个赞
知道答主
回答量:138
采纳率:0%
帮助的人:101万
展开全部
出现的问题是什么?
更多追问追答
追问
不显示啊,Print(save_temp);不显示数据啊
追答
LCD的驱动能正常工作不?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式