一、共阴数码管数字循环
#include <reg52.h>
sbit dula = P2^2;
sbit wela = P2^3;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x00
};//共阴数码管0-f,0x00不显示
delay(int n)
{
while(n--);
}
main()
{
unsigned char i;
wela=1;
P0=0x00;
wela=0;
while(1)
{
for(i = 0;i<16;i++)
{
dula=1;
P0=table[i];
dula=0;
delay(50000);
}
}
}
二、共阴数码管
#include <reg52.h>
sbit wela=P2^3;
sbit dula=P2^2;
unsigned char code we_table[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f
};//共阴数码管位码,单个,扫描
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x00
};
void delay(unsigned int n)
{
while(n--);
}
void main()
{
unsigned char i;
while(1)
{
for(i=0;i<8;i++)
{
wela=1;
P0=we_table[i];
wela=0;
dula=1;
P0=table[i];
dula=0;
delay(250);
}
}
}
三、共阴数码管累加器
#include <reg52.h>
sbit dula=P2^2;//段锁存;
sbit wela=P2^3;//位锁存;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f
};//共阴数码管0-9
unsigned char code we_table[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f
};//共阴数码管位码,单个,扫描
unsigned char temp[5];
void delay(int n)
{
while(n--);
}
void main()
{
unsigned int j;
unsigned char i;
while(1)
{
//j++;//j outside calculate speed will be lower
temp[0]=j/10000;//got each place
temp[1]=j/1000%10;
temp[2]=j/100%10;
temp[3]=j/10%10;
temp[4]=j%10;
for(i=0;i<5;i++)//scan
{
j++;//will be faster
wela=1;
P0=we_table[i];//light sigle led
wela=0;
dula=1;
P0=table[temp[i]];//set number
dula=0;
delay(500);
}
}
}
四、共阴数码管的消隐
#include <reg52.h>
sbit dula=P2^2;//段锁存;
sbit wela=P2^3;//位锁存;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f
};//共阴数码管0-9
unsigned char code we_table[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f
};//共阴数码管位码,单个,扫描
unsigned char temp[5];
void delay(int n)
{
while(n--);
}
void main()
{
unsigned int j;
unsigned char i;
while(1)
{
j++;//j outside calculate speed will be lower
if(j<10000)
temp[0]=0;
else
temp[0]=table[j/10000];//got each place
if(j<1000)
temp[1]=0;
else
temp[1]=table[j/1000%10];
if(j<100)
temp[2]=0;
else
temp[2]=table[j/100%10];
if(j<10)
temp[3]=0;
else
temp[3]=table[j/10%10];
temp[4]=table[j%10];
for(i=0;i<5;i++)//scan
{
//j++;//will be faster
wela=1;
P0=we_table[i];//light sigle led
wela=0;
dula=1;
P0=temp[i];//set number
dula=0;
delay(800);
}
}
}
五,共阴数码管左移
#include <reg52.h>
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f
};//共阴数码管0-9
unsigned char code we_table[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f
};//共阴数码管位码,单个,扫描;位码
unsigned int temp[10];
void delay(int n);
void display(int loca,int num);
sbit wela = P2^3;//位锁存
sbit dula = P2^2;//段锁存
main()
{
int k=0,i=0,s,j=0;
while(1)
{
j++;
if(j==10)
{
j=0;
if(0==k)
{
for(s=0;s<10;s++)
{
temp[s]=0;
}
}
temp[8-i]=table[k];
temp[8+1-i]=0;
if(i==(8-k))
{
i=0;
k++;
if(8==k)
{
k=0;
}
}
i++;
}
display(0,8);
}
}
void delay(int n)
{
while(n--);
}
void display(int loca,int num)//loca代表从第几位开始显示,num表示需要显示几位
{
unsigned int i;
for(i=0;i<num;i++)
{
P0=0;
dula=1;
dula=0;
P0=we_table[i+loca];
wela=1;
wela=0;
P0=temp[i];
dula=1;
dula=0;
delay(200);
}
}