找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1378|回复: 0
打印 上一主题 下一主题
收起左侧

单片机编程中这个细节不注意,查错要查到怀疑人生

[复制链接]
跳转到指定楼层
楼主
   编程中,对于有些变量,可以不赋初值,但有些变量,一定要赋初值,如果没有赋初值,就会出现错误,如果事先有所了解还好,知道查变量初值是不是没有赋值,如果没有这方面的经验,可能要排查好久才能查出故障,有时甚至查不出故障。如下面这段单片机程序:

#include <reg52.h>
#define uchar unsigned char
sbit rs=P3^5;
sbit rw=P3^6;
sbit E=P3^7;
//================================
void delay(int ii){int i;for(i=0;i<ii;i++);}
//-------------------------------
void LM1602_write(uchar dat,char cd)
{E=0;rw=0;rs=cd;
P0=dat;
E=1;delay(5);E=0;
}
//--------------------------------
void Putstr(char *str)
{int i;
while(str[ i]!=0){LM1602_write(str[ i],1);i++;delay(50);}
}
//===============================
main()
{
LM1602_write(0x38,0);
LM1602_write(0x0f,0);
delay(50);
Putstr("Hello MCU!");Putstr("12345");
while(1);
}  

程序原意要在液晶显示器上显示出两个字符,但运行结果如下。
    可以看出不如预期,这是因为变量Putstr(char *str)的变量i没有赋初值,如果改成这样就不会出现以上情况。
void Putstr(char *str)
{int i=0;
while(str[ i]!=0){LM1602_write(str[ i],1);i++;delay(50);}
}
此时运行情况如下:


程序运行达到预期。所以象这种变量大家要记得赋初值。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表