新手入门
- 积分
- 14
- 金钱
- 14
- 注册时间
- 2019-6-18
- 在线时间
- 5 小时
|
12金钱
本帖最后由 MLXGZZZ 于 2019-7-13 16:52 编辑
程序使点阵的第一行第一列亮起,代码图片如下(图1)。前提是循环变量i要定义为外部变量,或者静态局部变量,如果定义为局部变量不加Static关键字的话,程序就会出现错误,如图2和3所示,变成了倒数第一行和倒数第一列15个灯灭,其余亮。图2和3的区别是,图2主函数中不加delay,图2第一行第一列的灯特别亮,其余暗,图3主函数中加delay,亮度都一样,我想了好久也想不出来。 求解:为什么i的位置和类型不一样,导致的结果不一样。
delay为什么能造成图2和3不一样。
#include "reg52.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit CLK=P3^5; //移位寄存器时钟
sbit LE=P3^6; //锁存寄存器时钟
sbit DI=P3^4; //串行数据输入
void delay(unsigned int i)
{
unsigned int m,n;
for(m=i;m>0;m--)
for(n=90;n>0;n--);
}
//u8 i;
void send_byte(u8 DAT)
{
u8 dat;
//u8 i;
static u8 i;
dat=DAT;
for(i=0;i<8;i++)
{
CLK=0;
LE=0;
if(dat&0x80)
DI=1;
else
DI=0;
dat=_crol_(dat,1);
CLK=1;
}
LE=1;
}
void main()
{
send_byte(0xfe);
//delay(100);
send_byte(0x80);
}
图1
图3
|
|