永发信息网

AT89S52单片机0~999计数显示C语言程,起始显示000,一直到999

答案:1  悬赏:10  手机版
解决时间 2021-01-11 17:10
  • 提问者网友:感性作祟
  • 2021-01-10 21:21
AT89S52单片机0~999计数显示C语言程,起始显示000,一直到999
最佳答案
  • 五星知识达人网友:骨子里都是戏
  • 2021-01-10 22:19


#include //通用89C52头文件

sbit Axs=P3^4;//个位
sbit Bxs=P3^5;//十位
sbit Cxs=P3^6;//百位
sbit Dxs=P3^7;//千位

char table[10]={0xd7,0x14,0xcd,0x5d,0x1e,0x5b,0xdb,0x15,0xdf,0x5f};//数码管显示编码
int k,n;

void MScomm(void);//初始化
void YS(char hs);//延时函数
void XS(int xs);//显示函数

void main(void)//主函数
{
n=0;
MScomm();//串口初始化
while(1)//主循环
{
XS(k);
}
}

void ser() interrupt 1//中断方式
{
TH0=(65536-922)/256;// 1毫秒初值
TL0=(65536-922)/256;//晶振12M
n++; if(n>100)//如果达到指定时间
{n=0;k++;}//1000为1秒
if(k>9999){k=0;}
}

void MScomm(void)//串口初始化
{
TMOD=0x01;//定时器0工作方式1
EA=1;//
ET0=1;//
TH0=(65536-922)/256;// 1毫秒
TL0=(65536-922)/256;
TR0=1; //启动定时器T1
}

void XS(int xs) //显示子函数
{
char d1,d2,d3,d4;
d4=(xs/1)%10; //取个位 %求余
d3=(xs/10)%10; //取十位
d2=(xs/100)%10; //取百位
d1=(xs/1000)%10; //取千位

P1=table[d4]; Axs=0; YS(10); Axs=1;//个位显示
P1=table[d3]; Bxs=0; YS(10); Bxs=1;//十位显示
P1=table[d2]; Cxs=0; YS(10); Cxs=1;//百位显示
P1=table[d1]; Dxs=0; YS(10); Dxs=1;//千位显示
}

void YS( char hs)//延时函数
{
char hk;

for(;hs>0;hs--)
{ for(hk=200;hk>0;hk--); }// 10
}

///////////////////////////////////////

送你啦,哈哈

只不过我用的数码管编码和你的可能不一样,根据你那实际情况修改一下即可

还有你使用的段位控制引脚追问谢谢追答恩,不必客气
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯