铁汁们,俺又回来了!!!
今天学中断的时候(对!没错!俺松懈了好几天,别骂了别骂了😕),看着上次动态数码管繁冗的代码,实在忍无可忍!突然就想出来个妙招!(非常激动!)
上代码!
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
int code a[8]={1,0,1,0,1,0,1,0};
int code b[8]={1,1,0,0,1,1,0,0};
int code c[8]={1,1,1,1,0,0,0,0};
void delay(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void main()
{
uint i;
while(1)
{
for(i=0;i<8;i++)
{
LSA=a[i];
LSB=b[i];
LSC=c[i];
P0=smgduan[i];
delay(1);
P0=0x00;
}
}
}
可以看到,相较之前,main函数之前,多了这样三行代码:
int code a[8]={1,0,1,0,1,0,1,0};
int code b[8]={1,1,0,0,1,1,0,0};
int code c[8]={1,1,1,1,0,0,0,0};
?这里在code(程序存储区)中定义了三个一维数组,而在后面的for循环中,则调用了这三个数组:
for(i=0;i<8;i++)
{
LSA=a[i];
LSB=b[i];
LSC=c[i];
...
此时,?LSA,LSB,LSC 所代表的是,将要控制对应第 i 个数码管的显示。
这个看着可比一大堆break舒服多了叭!嘿嘿!(俺不是强迫症!不是!)
以上!
(小声BB:中断有亿点点难理解🤣)
|