单片机中二位数码管的显示,怎样用c语言写一段从0到99的程序啊?

如题所述

公阳,P0.2,P0.3 分别通过PNP管接个位,十位数码管公共端,P1口输出数据,都是低电平有效
#include <reg51.h>
sbit shi=P0^3; //十位公共极
sbit ge=P0^2; //个位公共极
#define Out P1 //数据输出端
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳
// 实际显示 0 1 2 3 4 5 6 7 8 9

//延时----------------------------
Delay(unsigned int t)
{
while(t--);
}
//主程序--------------------------
main()
{

unsigned char i=j=0;
while(1) //循环显示
{
for(i=0;i<200;i++)
{
Out=tab[j%10];
ge=0;
Delay(1000);
ge=1;

Out=tab[j/10];
shi=0;
Delay(1000);
shi=1;
}
j++;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-06-21
对于单片机中数码管的显示问题。每位数码管由七个小的晶体管控制。你首先得确定该数码管的段码表。之后,根据段码表来确定。本回答被网友采纳
第2个回答  2017-06-21
大致步骤为先确定数码管显示数字需要单片机如何驱动(一般单片机一个I/O口控制一个小灯管正负中的一级),然后一个循环递减应该能实现
第3个回答  2013-08-01
有的是七段,有的是八段,然后看是要共阴还是共阳,再根据码表写程序。
第4个回答  2013-08-01
#include<regx51.h>
int i,j;
void zhongduanini(void)
{
TMOD=0x01;
ET0=1;
EA=1;
TR0=1;
TH0=0x3c;
TL0=0xaf;
}

void time_1s (void) interrupt 1
{
int ncount;
TH0=0x3c;
TL0=0xaf;
ncount++;
if(ncount<20) return;
{
ncount=0;
i++;
if(i==100) i=0;
}
}
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void main(void)
{
zhongduanini();

for(;;)
{
P2=table[i%10];
P3_1=0;
for(j=0;j<1200;j++);
P3_1=1;
P2=table[i/10];
P3_0=0;
for(j=0;j<1200;j++);
P3_0=1;
}
}本回答被网友采纳