[51单片机]for循环中,数组数据提取
2018-04-14 本文已影响4人
Natsuka
学习代码,数码管动态显示。
案例说明:第一个数码管显示1,时间为0.5s,然后关闭它,立即让第二个数码管显示2,时间为0.5s,再关闭它……一直到最后一个数码管显示6,时间同样为0.5s,关闭它后再回来显示第一个数码管,一直循环下去。
案例中给出的是非循环的代码, 这里我需改成了for循环的形式。最开始将i=1
放在了for循环的括号内部,总是报错。由于初学不是很了解具体的原因,特此记录。
全部代码:
#include<reg52.h> //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; //申明U1锁存器的锁存端
sbit wela=P2^7; //申明U2锁存器的锁存端
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x5f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code table2[]={
0xfe,0xfd,0xfb,0xff,0xef,0xdf};
void delayms(uint);
void main()
{
while(1)
{
int i=1;
for(i;i<7;i++)
{
dula=1;
P0=table[i]; //送段选数据
dula=0;
P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存器时,
wela=1; //原来的段选位数据通过位选锁存器造成混乱送位选数据
P0=table2[i];
wela=0;
delayms(500); //延时
}
}
}
void delayms(uint xms){
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
{
for(j=110;j>0;j--);
}
}