一、共陰數碼管數字循環
#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);
}
}