这是数码管模拟波形的动态效果,但是代码中有些小bug,眼尖的可以发现哦。
直接上代码,课题上讲过了:
代码语言:javascript复制/*****************************************************************************
* 头文件 *
*****************************************************************************/
#include "8052.h"
#define LSA P1_5
#define LSB P1_6
#define LSC P1_7
unsigned char smgduan0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
unsigned char smgduan1[]={0xfd,0xfb,0xf7,0xef,0xdf,0xfe};
unsigned char smgduan2[]={0xfb,0xf7,0xef,0xdf,0xfe,0xfd};
unsigned char smgduan3[]={0xf7,0xef,0xdf,0xfe,0xfd,0xfb};
//共阳极的显示代码表
/*****************************************************************************
* 初始化和功能函数 *
*****************************************************************************/
void delay(unsigned int ms) //
{
unsigned int x;
unsigned int y;
for(x=ms;x>0;x--)
for(y=110;y>0;y--)
;
}
void sys_init(void)
{
LSA = 0;
LSB = 0;
LSC = 0;
}
void LedScan(unsigned char pos,unsigned char dispcode)
{
unsigned char i;
for(i=0;i<=pos;i )
{
switch(pos) //位选,选择点亮的数码管,
{
case(0):
LSA=1;LSB=0;LSC=0; break; //显示
case(1):
LSA=0;LSB=1;LSC=0; break; //显示第1位
case(2):
LSA=1;LSB=1;LSC=0; break; //显示第2位
case(3):
LSA=0;LSB=0;LSC=1; break; //显示第3位
}
P0=dispcode; //发送段码
}
}
/*****************************************************************************
* 主函数 *
*****************************************************************************/
void main(void)
{
sys_init();
int i=0,j=5;
while(j--)
{
for(i=6;i>0;i--)
{
LedScan(0,smgduan0[i]);
delay(10);
LedScan(1,smgduan1[i]);
delay(10);
LedScan(2,smgduan2[i]);
delay(10);
LedScan(3,smgduan3[i]);
delay(10);
}
}
}