********************数码管****************
/*本程序使用数组的方法控制共阴极数码管显示1-10,A-F*/
/*作者 谢海斌 2010.12.21 */
#include <REG52.h> //51头文件
#define sm P1 //设置LED连接的I/O组
unsigned char table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//使用数组的方法能有效减少代码存储空间
**************** 延时函数*****
void delay(unsigned int a)
{
unsigned int i;
while(--a!=0)
{
for(i=0;i<=600;i++);
}
}
void main()
{
while(1)
{
sm=table[0];
delay(200);//200毫秒
sm=table[1];
delay(200);
sm=table[2];
delay(200);
sm=table[3];
delay(200);
sm=table[4];
delay(200);
sm=table[5];
delay(200);
sm=table[6];
delay(200);
sm=table[7];
delay(200);
sm=table[8];
delay(200);
sm=table[9];
delay(200);
sm=table[10];
delay(200);
sm=table[11];
delay(200);
sm=table[13];
delay(200);
sm=table[0];
delay(14);
sm=table[15];
delay(200);
}
}
再来个AMTEL16L版本的
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#pragma data:code
const table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint MS)
{
uint i,j;
for( i=0;i<MS;i++)
for(j=0;j<1141;j++); //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
}
void show(uchar data,uchar num)
{
PORTB=table[data];
PORTA|=BIT(3);//00001000
PORTA&=~BIT(3);
PORTB=0XFF;
PORTB&=~BIT(num);//0XFE;
PORTA|=BIT(4);
PORTA&=~BIT(4);
delay(1);
}
void main()
{
uint i,j;
DDRA=0XFF;
DDRB=0XFF;
PORTA|=BIT(6);
while(1)
{
for(j=0;j<600;j++)
{
for(i=0;i<6;i++)
{
show((i+j/100)%6,i);
}
}
}
}
|