用单片机控制一个8段数码管,其循环显示数字0到9,每位数字显示时间为一秒,定时功能用单片机中断显示

用单片机控制一个8段数码管,其循环显示数字0到9,每位数字显示时间为一秒,定时功能用单片机中断显示,按键K用于启停控制,C语音程序怎么写,和程序流程图,和系统功能图... 用单片机控制一个8段数码管,其循环显示数字0到9,每位数字显示时间为一秒,定时功能用单片机中断显示,按键K用于启停控制,C语音程序怎么写,和程序流程图,和系统功能图 展开
 我来答
帐号已注销
推荐于2017-10-11 · TA获得超过2061个赞
知道小有建树答主
回答量:342
采纳率:0%
帮助的人:335万
展开全部

有一个一模一样的提问,好吧,俺再发布一次


给你一份我自己写的,利用四位数码管显示模拟时钟的程序吧,供你研究


另外,再给你一个一位数码管的,是你要求的那种


这两个都是利用单片机的定时器中断来产生秒信号的


下面这个是 四位数码管的,最下边的是一位数码管的,端口不一样的话,自己改下


/***************************************************************************/

#include<reg51.h>

sbit p20=P3^7; sbit p21=P3^6; sbit led=P2^7;//按键及LED端口定义

sbit Axs=P1^3; sbit Bxs=P1^2; sbit Cxs=P1^1; sbit Dxs=P1^0;//数码管位选端口

char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码

unsigned int h,m,s,t,n;

/***************************************************************************/

void YS(char hs)//延时函数

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

/***************************************************************************/

void XS(int xh,int xm) //显示子函数

{

    char d1,d2,d3,d4;

    d1=(xh/1)%10; d2=(xh/10)%10;//分离小时

    d3=(xm/1)%10; d4=(xm/10)%10;//分离分钟


    P0=table[d1];Cxs=0;YS(10);Cxs=1;//小时个位

P0=table[d2];Dxs=0;YS(10);Dxs=1;//小时十位

    P0=table[d3];Axs=0;YS(10);Axs=1;//分钟个位

P0=table[d4];Bxs=0;YS(10);Bxs=1;//分钟十位

    P0=0x7f; P1=0xfd; YS(10); P1=0xff;//小数点

}

/***************************************************************************/

void main(void)

{

    TH0=(65536-1000)/256; TL0=(65536-1000)%256;

    TMOD=0x01; EA=1; ET0=1; TR0=1;//定时器初始化

    while(1)//主循环

    {

        if(p20==0){YS(10);if(p20==0){h++;if(h>23){h=0;}}while(!p20){XS(h,m);}}

        if(p21==0){YS(10);if(p21==0){m++;if(m>59){m=0;}}while(!p21){XS(h,m);}}

        XS(h,m);//调用数码管显示函数

    }

}

/***************************************************************************/

void int1() interrupt 1 //定时器中断

{

    TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;t++;

    if(t>500){t=0;led=~led;}//LED闪烁

    if(n>1000){n=0;s++;}//如果达到一秒,秒加一

    if(s>59){s=0;m++;}//如果达到一分,分加一

    if(m>59){m=0;h++;}//如果达到一小时,小时加一

    if(h>23){h=0;}//如果达到24小时,小时清零

}

/***************************************************************************/



/***************************************************************************/

#include<reg51.h>

sbit Axs=P1^3;//数码管位选端口

char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码

unsigned int h,m,s,t,n;

/***************************************************************************/

void YS(char hs)//延时函数

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

/***************************************************************************/

void main(void)

{

    TH0=(65536-1000)/256; TL0=(65536-1000)%256;

    TMOD=0x01; EA=1; ET0=1; TR0=1;//定时器初始化

    while(1)//主循环

    {

        P0=table[m];Axs=0;YS(10);Axs=1;//小时个位

    }

}

/***************************************************************************/

void int1() interrupt 1 //定时器中断

{

    TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;

    if(n>1000){n=0;m++;}//如果达到一秒,秒加一

    if(m>9){m=0;}//如果达到一小时,小时加一

}

/***************************************************************************/

更多追问追答
追问

你可以再帮我写一下吗
来自龙泉书院聪敏的米兰草
2015-01-24 · TA获得超过2809个赞
知道小有建树答主
回答量:5583
采纳率:0%
帮助的人:1809万
展开全部
是想好了
追问
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式