打印

单片机语法问题 详见scan函数

[复制链接]
1184|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
damoyeren|  楼主 | 2014-11-4 21:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//目的:显示一个固定的数字
//有几个问题没搞明白,详见scan程序注释
# include <reg52.h>

typedef unsigned char uchar;
typedef unsigned int uint;
sbit addr0 = P1^0;
sbit addr1 = P1^1;
sbit addr2 = P1^2;
sbit addr3 = P1^3;
sbit enled = P1^4;
uchar a, b, c = 0;
uchar number[16] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xa7,0xa1,0x86,0x8e
};


void scan (void);

void main (void)
{

addr3 = 1;
while (1)
{
scan();
}
}


void scan (void)
{
//uchar a,b,c; 为什么不能定义为局部变量
uchar i = 158;//要显示的数字
enled = 1;// 这句和上边那句(uchar i = 158)位置为什么不能调啊
a = i/100;
addr0 = 1;
addr1 = 0;
addr2 = 1;
P0 = number[a]; //显示第一位
enled = 0;

enled = 1;
b = i%100/10;
addr0 = 0;
addr1 = 0;
addr2 = 1;
P0 = number[b]; //显示第二位
enled = 0;

enled = 1;
c = i%100%10;
addr0 = 1;
addr1 = 1;
addr2 = 0;
P0 = number[c]; //显示第三位
enled = 0;
}

相关帖子

沙发
samglz| | 2014-11-10 17:32 | 只看该作者
c函数只允许在开始之处申明变量

使用特权

评论回复
板凳
airwill| | 2014-11-11 22:05 | 只看该作者
1. C51 (Keil) 是可以定义局部变量的. 而且我推荐定义局部变量, 因为编译器可以通过内存覆盖分析, 可能节省内存的消耗.

2. 位置为什么不能调, 就如楼上所说, C 函数只允许在开始之处申明局部变量

使用特权

评论回复
地板
damoyeren|  楼主 | 2014-11-17 12:45 | 只看该作者
samglz 发表于 2014-11-10 17:32
c函数只允许在开始之处申明变量

uchar i = 158;//要显示的数字
enled = 1;// 这句和上边那句(uchar i = 158)位置为什么不能调啊

使用特权

评论回复
5
wangch_sh| | 2014-11-17 14:14 | 只看该作者
变量定义语句不能在赋值语句之后。

使用特权

评论回复
6
lanmp| | 2014-11-17 15:41 | 只看该作者
改用C99

使用特权

评论回复
7
damoyeren|  楼主 | 2014-11-17 17:00 | 只看该作者
airwill 发表于 2014-11-11 22:05
1. C51 (Keil) 是可以定义局部变量的. 而且我推荐定义局部变量, 因为编译器可以通过内存覆盖分析, 可能节省 ...

我导向定义局部变量的,但是不能定义啊,如果定义为局部变量,编译报错!

使用特权

评论回复
8
airwill| | 2014-11-17 18:14 | 只看该作者
damoyeren 发表于 2014-11-17 17:00
我导向定义局部变量的,但是不能定义啊,如果定义为局部变量,编译报错! ...

如果定义为局部变量,编译报错!
为什么不把错误代码和信息贴上来呢?

使用特权

评论回复
9
qqljhang| | 2014-11-18 22:09 | 只看该作者
全局查找一下a,b,c是不是在别的地方也用到了,所以不能定义为局部变量?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

126

主题

393

帖子

2

粉丝