单片机,C语言编程的问题,编一个程序。

2024-11-25 19:56:22
推荐回答(4个)
回答1:

先运行看看吧……
/**************************************************************
六位数码管显示
***************************************************************/
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int

uchar code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB}; //cmos对数码管的显示控制位uchar code DispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //字符显示
uchar DispBuf[6]; //6字节的显示缓冲区

void Timer0() interrupt 1{ uchar tmp;
static uchar Count=0;
TH0=(65536-3000)/256;
TL0=(65536-3000)%256; //定时时间为3000个周期
P2=P2|0xfc; //P2高6为置1
P2=BitTab[Count]; //设置第几位显示
tmp=DispBuf[Count];
P0=DispTab[tmp]; //设置显示的字符,即送出字形码
Count++;
if(Count==6) //计数器等于6,则让其回0
Count=0;
}

void longtobuf(unsigned long m)
{ uint i;
for(i=0;i<6;i++)
{
DispBuf[5-i]=m%10; //为便于理解,楼主可随写几个6位以内数字,推敲该小段程序即可
m=m/10;
}
}
void mDelay(uint Delay) //延时程序
{
uint i;
for(;Delay>0;Delay--)
for(i=0;i<124;i++);
}

main() //中断方式{
unsigned long m;
P1=0xff; //流水灯禁用
P0=0xff; //不显示字形码
TMOD=0x01;
TH0=(65536-3000)/256; //设置定时3ms(等同于3000周期),取高位
TL0=(65536-3000)%256; //设置定时3ms,取低位,格式如是可做相应替换
TR0=1;
EA=1; //总中断允许
ET0=1; // T0中断允许
m=1; //从1开始计数
for(;;)
{ longtobuf(m);
m++;
mDelay(100); //以ms为单位,此处设为0.1s,可更改
}
}
没错吧……亲,希望能帮到你!

回答2:

用6个变量,表示六个数位,第一个变量自加,满9后第二个变量加1,以此类推,然后动态显示输出,自加的过程可以采用Timer中断。到最后一个变量满9后,再进位则全部置0.

回答3:

找一个数码管的显示程序,对照你的硬件改改端口就行了,唯一需要注意的是这个计数 器得用长整型数

回答4:

满十进一 第二位变1 岂不是 1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,21你那里怎么有个20嘞 这不相当于9进制变异版?