把 数码管的 1-9 的 对应的码算出来就好了
例如:#include AT89X51.H
//数字0-9的字形码
unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char dispcount;
void delay02s(void);
void main(void)
{
P1_0=0;//选通第一位数码管
while(1)
{
for(dispcount=0;dispcount10;dispcount++)
{
P0=table[dispcount];
delay02s();
}
}
}
void delay02s(void)
{
unsigned char i,j,k;
for(i=20;i0;i--)
for(j=30;j0;j--)
for(k=248;k0;k--);
}
补充:单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机
采用共阴极LED数码管,51单片机P1口输出数据:ORG 0000H
JMP MAIN
ORG 0100H
MAIN:MOV DPTR,#TAB
MOV R1,#00H
DISP:MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY
INC R1
CJNE R1,#0AH,DISP
SJMP $
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDELAY: MOV R4,#2
DELAY100MS:MOV R5,#200
DELAY5MS: MOV R6,#250
LOOP: DJNZ R6,LOOP
DJNZ R5,DELAY5MS
DJNZ R4,DELAY100MS
RET
/*模块低电平有效、外部中断0、1为低电平出发*/
#include "reg52.h"
void delay( char i)
{
unsigned char t;
while(i--)
{
for(t=0;t108;t++);
}
}
void INT0_ROUTING() interrupt 0//外部中断0子程序
{
P0=0xfe;//LED0点亮
while((P3|0xfb)==0xff);//等待外部中断0口(P3^2松开)
delay(10);//延时去抖动
P0=0xff;//LED0熄灭
}
void INT0_ROUTING() interrupt 2
{
P0=0xfd;//LED1点亮
while((P3|0xf7)==0xff);//等待外部中断1口(P3^3松开)
delay(10);//延时去抖动
P0=0xff;//LED1熄灭
}
void main()
{
EA=1;//中断总开关
EX0=1;//外部中断0开
EX1=1;//外部中断1开
/*默认低电平触发*/
while(1);//死循环 防止跑飞
}
#includereg52.h//要一个一个显示循环的就把时间调的长一点
#define uint unsigned int
#define uchar unsigned char
void delay(uint z);
uchar code table[]={0x3f,
0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,
0x5e,0x79,0x71,0x76,0x79,0x38,0x3f,0};
sbit dula=P2^6;
sbit wela=P2^7;
uchar sw,ww,qq,bai,shi,ge,aa;
unsigned long int temp;
void shuma(uchar sw,uchar ww,uchar qq,uchar bai,uchar shi,uchar ge);
void init();
void main()
{
//init();//初始化子程序
temp= 91813;
sw=temp/100000;
ww=temp%100000/10000;
qq=temp%10000/1000;
bai=temp%1000/100;
shi=temp%100/10;
ge=temp%10;
while(1)
{
shuma(sw,ww,qq,bai,shi,ge);
}
}
void delay(uint z)
{
uint x,y;
for(x=110;x0;x--)
for(y=z;y0;y--);
}
void shuma(uchar sw,uchar ww,uchar qq,uchar bai,uchar shi,uchar ge)
{
dula=1;
P0=table[sw];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);//要一个一个显示循环的就把时间调的长一点 1改成 200
dula=1;
P0=table[ww];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[qq];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[bai];
dula=0;//送百位
P0=0xff;//消隐
wela=1;
P0=0xf7;//位选通百位数
delay(1);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1;
P0=table[ge];
dula=0;
P0=0xef;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
#includereg51.h
#define uchar unsigned char
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9
uchar time,scanled,tiao;
uchar disdat[6]="201803";
void delay(unsigned int x)
{
unsigned int i,j;
for(i=0;ix;i++)
for(j=0;j120;j++);
}
void t0isr() interrupt 1 //秒计时
{
TH0=0x3c;
TL0=0xb0;
time++;
if(time==20)
{
time=0;
tiao++;
tiao%=10;
}
}
void t1isr() interrupt 3 //显示
{
TH1=0xec;
TL1=0x78;
P2=1scanled;
P0=~ledtab[tiao];
scanled++;
scanled%=4;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1);
}
希望可以帮到你哈,望采纳哦
//用LED数码显示器循环显示数字0~9
#includereg52.h // 包含51单片机寄存器定义的头文件
/**************************************************
函数功能:延时函数,延时一段时间
***************************************************/
void delay(void)
{
unsigned char i,j;
for(i=0;i255;i++)
for(j=0;j255;j++)
;
}
/**************************************************
函数功能:主函数
***************************************************/
void main(void)
{
unsigned char i;
unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//数码管显示0~9的段码表,程序运行中当数组值不发生变化时,
//前面加关键字code ,可以大大节约单片机的存储空间
P2=0x7f; //P2.7引脚输出低电平,数码显示器第7位接通电源工作
while(1) //无限循环
{
for(i=0;i10;i++)
{
P0=Tab[i]; //让P0口输出数字的段码92H
delay(); //调用延时函数
}
}
}
单片机共阴极数码管09程序的介绍到此就结束了,感谢您耐心阅读,谢谢。
本文标签:单片机共阴极数码管09程序