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

用单片机控制一个8段数码管,其循环显示数字0到9,每位数字显示时间为一秒,定时功能用单片机中断显示,按键K用于启停控制,C语音程序怎么写,和程序流程图,和系统功能图

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


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


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


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


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


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

#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;}//如果达到一小时,小时加一

}

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

追问

你可以再帮我写一下吗

还有硬件电路原理图,程序流程图

追答

记得要采纳哦,上一个也是你提问的吧,还没采纳呢


void main(void)

{

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

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

    while(1)//主循环

    {

        if(t==1)//如果已经打开

        {P0=table[m];Axs=0;YS(10);Axs=1;}//数码管显示数据

        else{Axs=1;}//否则关闭数码管

        

        if(K==0&&t==0)//如果按键被按下且处于关闭状态

        {

            YS(10);//延时去抖动

            if(K==0&&t==0)//如果按键仍被按下

            {

                TR0=1;//打开定时器

                n=0; m=0;//清空数据

                t=1;//设置标识符 为开

                while(!K);//等待按键松开

            }

        }

        

        if(K==0&&t==1)//如果按键被按下且处于打开状态

        {

            YS(10);//延时去抖动

            if(K==0&&t==1)//如果按键仍被按下

            {

                TR0=0;//关闭定时器

                n=0; m=0;//清空数据

                t=0;//设置标识符为关

                while(!K);//等待按键松开

            }

        }

    }

}

追问

上次的和这这次的怎么不一样

还有硬件电路图,程序流程图

追答

一样的,字数限制,头文件和定义部分没贴出来

/***************************************************************************/
#include
sbit Axs=P1^3; sbit K=P3^7;//数码管位选端口
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码
unsigned int m,n,t=0;
/***************************************************************************/
void YS(char hs)//延时函数
{char hk;for(;hs>0;hs--){for(hk=100;hk>0;hk--);}}
/***************************************************************************/

追问

哦哦,那硬件电路图你会吗

追答

别客气

追问

你不会吗

追答

恩,硬件电路,我从不用绘图软件的,不过可以给你讲讲怎么连线

你之前的那个提问,能采纳一下吗,谢谢

追问

恩可以,那程序流程图那

追答

程序都有了,流程图就可以参照程序的运行顺序画了啊

追问

我不会,你可以帮我画下吗

追答

我这没有绘图软件

追问

程序流程图不用绘图软件吧

追答

不用绘图软件你怎么画图?????

用手指在显示器上画画,你能保存在电脑中吗?

追问

程序流程图不是这样的吗

追答

对啊,就是这样的,但这是使用绘图软件绘制的,绘图软件的种类还很多呢

追问

哦哦,那这样的你会吗,给我画下吧

用笔画下就好了

怎么不说话了

追答

用笔画倒是可以,但没办法输入到电脑上,也就没办法传给你呀


我的手机没有照相功能

追问

能不能用文字叙述

追答

先是初始化,然后是状态啊判断,这是后在侧面画个箭头,就是分支

状态0,打开数码管显示,并打开定时器开始计数,另一个分支是检测计数值是否大于9

如果大于9 ,则清零,重新开始

状态1,关闭数码管显示,并关闭定时器,以及清零数据

在判断状态的下面再写上 按键判断,按键判断的同时,也判断状态

然后根据不同的状态设置结果

追问

谢谢你,

那你会系统功能结构图吗

追答

不会

追问

哦谢谢你

追答

别客气

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-01-24
是想好了追问

用单片机控制一个8段数码管,其循环显示数字0到9,每位数字显示时间为一秒...
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;}}wh...

用单片机控制一个8段数码管,其循环显示数字0到9,每位数字显示时间为一秒...
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(1...

51单片机,8个数码管循环显示1-9的C语言程序。
假设8个数码管公共端均接地,同时显示1-9\\x0d\\x0a#include\\x0d\\x0a#include\\x0d\\x0a#defineucharunsignedchar\\x0d\\x0a#defineuintunsignedint\\x0d\\x0aucharcodeDSY_CODE[]=\\x0d\\x0a{\\x0d\\x0a0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff\\x0d\\x0a}...

单片机8位数码管动态显示00-99
1、配置引脚——根据所使用的数码管的类型和位数,选择合适的引脚连接单片机和数码管,一般使用多路IO口控制,例如8位数码管需要至少8个IO口。2、建立数码管显示表——根据数码管的类型和位数,建立对应的显示表,记录0~9数字对应的数码管段亮灭状态。3、控制数码管动态显示——使用定时器中断和计数器...

单片机如何控制LED数码管循环显示数字0至9
,显示9,1s后再重新屏示0.如此循环。(2)当按下停止孩钮后,数码管烟灭。7数码营实际上是由7只发光二极管组成,要显示0-9数字,首先确定数字与7只发光管(即PC的输出控制点)的关系。如要易示数字0,则需要a、b、c、d、ef管亮,则对应的PLC的需驱动的输出点为Q0.0,Q0.1,Q0.2,Q0.3,Q0....

51单片机怎么用汇编语言让8个数码管不停的 显示0-9(最好要接74HC595...
要数码管不停显示,只能用动态显示,但是要看是单片机接数码管是哪个端口,还有是直接接在数码管上还是中间有寄存器,不知74HC595是接在哪的

如何用单片机实现循环显示,谁有循环显示程序
\/\/i1=9;\/\/显示数字9 while(1){ WX1=1;WX2=1;WX3=1; \/\/1,在第1个数码管上显示 P0=a[1];\/\/段选 delaym(8);WX1=0;WX2=1;WX3=1;; \/\/2,在第2个数码管上显示 P0=a[2];\/\/段选 delaym(8);WX1=1;WX2=0;WX3=1;; \/\/3,在第3个数码管上显示 P0=a[3];\/\/段选 de...

怎样用一个单片机控制8个数码管
如果是一个8段数码管的8个段码,直接连接8个I\/O到对应的8个段的控制端即可,通过I\/O输出高低电平控制对应的段码。如果是8个数码管,则,每个数码管的8个断码控制线并联总线到I\/O,作为数据控制。每个数码管的使能端口单独控制,或者使用进位模式,做选择控制哪一个数码管显示。

...8个数码管让第1个显示0~9然后第2个,8个循环显示,用汇编写,也就是a...
定义8个显示缓冲,8个数码管对应8个显示缓冲,改变显示缓冲的数据就改变了数码管显示内容

单片机用汇编写两个数码管显示0到99循环的程序
以确保每个数字的显示有足够的时间。为了实现0到99的循环效果,你需要确保变量i在每次循环中更新,同时限制它的值范围,这样可以依次显示各个数字。通过这样的步骤,你将能够编写出一个单片机汇编程序,实现数码管0到99的循环显示。每个数字的显示都是通过控制位选和段选,以及适时的延时来完成的。

相似回答