您的位置:首页 > 其它

52单片机控制数码管显示数字

2011-10-10 17:27 495 查看
a#include<AT89x52.h>

unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

sbit L1=P2^7;

sbit clk=P2^0;

sbit AB=P2^1;

sbit SA=P2^2;//数码管一的com端

sbit SB=P2^3;//数码管二的com端

sbit SC=P2^4;

sbit SD=P2^5;

void setTable(char num)

{

unsigned char c;

for(c=0;c<8;c++)

{

clk=0;

AB=num&0x01;

num=num>>1;

clk=1;

}

}

void delay2(void)

{

unsigned char c;

for(c=0;c<255;c++)

{

TF0=0;

TH0=(65536-55536)/256;

TL0=(65536-55536)%256;

}

}

void Light(void)

{

unsigned char x,a,b,c,j,z,count=0;

x=0xf8;

TMOD=0x01;//第一种工作方式 01、定时 0、TCON置0,低八位开始工作

TH0=(65536-55536)/256;

TL0=(65536-55536)%256;

TR0=1;

while(1)

{

for(c=0;c<6;c++)

{

for(b=0;b<10;b++)

{

for(z=0;z<6;z++)

{

x=0xf8;

for(j=0;j<10;j++)

{

//实现一行流水灯逐个闪亮

P1=x;

x=x<<1;

x=x|0x01;

L1=0;

if(j==9)

{

P1=0x00;

L1=0;

}

for(a=0;a<30;a++)

{ //千位上的数码管显示数字

setTable(table[c]);

SA=0;

SB=1;

SC=1;

SD=1;

delay2();

//百位上的数码管显示数字

setTable(table1[b]);

SB=0;

SC=1;

SD=1;

SA=1;

delay2();

//十位上的数码管显示数字

setTable(table[z]);

SC=0;

SD=1;

SB=1;

SA=1;

delay2();

//个位上的数码管显示数字

setTable(table[j]);

SD=0;

SC=1;

SB=1;

SA=1;

delay2();

L1=1 ;

}

}

}

}

}

}

}

void main(void)

{

Light();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: