电路设计论坛
直播中

张先生

5年用户 8经验值
私信 关注
[问答]

有倒计时三十秒的八人抢答器的仿真图吗?

救急救急!!!有倒计时三十秒的八人抢答器的仿真图吗?
  • Screenshot_2019-12-24-23-20-32-302_com.tencent.mobileqq.png

回帖(5)

李维嘉

2019-12-25 11:06:37
仿真图?仿真后的波形图吗?这个要和程序对的上才行吧,或者你要的是原题图?
举报

张先生

2019-12-25 12:03:33
我需要的是软件上原题图
举报

王栋春

2019-12-25 15:36:44
有类似的资料 楼主修改一下延时参数即可
举报

阿迪达斯123

2019-12-25 16:38:11
是这样的吗 123.png
举报

阿迪达斯123

2019-12-25 16:58:58
#include
#include "stdio.h"
#include "string.h"

//--定义使用的IO口--//
#define GPIO_DIG   P0        //段选
#define GPIO_PLACE P2        //位选

//--定义全局变量--//
unsigned char code DIG_PLACE[8] = {
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制   查表的方法控制
unsigned char code DIG_CODE[17] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsigned char DisplayData[8];
//用来存放要显示的8位数的值

//--声明全局函数--//
void DigDisplay(); //动态显示函数
int time=30;
int tmp=0;

/*******************************************************************************
* 函 数 名         : main
* 函数功能                   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void main(void)
{
  EA = 1;             //所有中断
  EX0=1;
  EX1=1;         
  ET0 = 1;       //开启定时器T0中断
  IT0=1;
  IT1=1;

  TMOD = 0X01;        //选用模式1                16位定时器定时模式
  TH0 = 0x0FC;
  TL0 = 0x18;          

   P1=0xff;

        while(1)
        {
         if(tmp)
         {          
          while(P1==0xff);
          TR0=0;
          switch(P1)
          {
            case 0xfe:time=1;break;
                case 0xfd:time=2;break;
                case 0xfb:time=3;break;
                case 0xf7:time=4;break;
                case 0xef:time=5;break;
                case 0xdf:time=6;break;
                case 0xbf:time=7;break;
                case 0x7f:time=8;break;
          }
          
          tmp=0;
          }
        DisplayData[0]=time%10;
        DisplayData[1]=(time/10)%10;

        DigDisplay();
        }                               
}

/*******************************************************************************
* 函 数 名         : DigDisplay
* 函数功能                   : 使用数码管显示
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void DigDisplay( )
{       
        unsigned char i;
        unsigned int j;
                  
        for(i=0; i<2; i++)
        {               
                GPIO_PLACE = DIG_PLACE[1-i];         //发送位选
                GPIO_DIG = DIG_CODE[DisplayData[i]];     //发送段码
                j = 2;                                                 //扫描间隔时间设定
                while(j--);       
                GPIO_DIG = 0x00;//消隐
        }
}

void start() interrupt 0  //启动/复位按钮
{
   unsigned char i;

   i++;
   if(i==1)
   {
   TR0 = 1;             //启动T0定时器
   tmp=1;
   }
   else
   {
     TR0=0;
         tmp=0;
         time=30;
         i=0;
   }
}

void timer0() interrupt 1
{
  unsigned int i;

    TH0 = 0x0FC;
    TL0 = 0x18;
  i++;
  if(i==1000)
  {
    i=0;
        time--;
        if(time==0)
        TR0=0;
  }
          DisplayData[0]=time%10;
        DisplayData[1]=(time/10)%10;

        DigDisplay();
}

void settime() interrupt 2        //设置时间
{
time+=10;
if(time>60)
time=30;
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分