找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1924|回复: 1
打印 上一主题 下一主题
收起左侧

能帮我看看有什么问题吗?单片机数码管不知道为什么不亮

[复制链接]
跳转到指定楼层
楼主

单片机源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
code uchar seven_seg[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
code uchar seven_bit[] = {0xfe,0xfd,0xfb,0xf7};

sbit run_key = P3^2;
sbit rst_key = P3^3;
sbit add_key = P3^6;
sbit dec_key = P3^7;
sbit buzzer = P3^5;

uchar player;
uint player_num = 0;
uchar now_time = 25;
uchar next_time;
bit run_flag = 0;
bit time_off = 0;
uint Count_A = 0;
uint Count_B = 0;


void delay(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
void keyScan()
{
if(run_key==0)
{
delay(5);
if(run_key==0)
{
run_flag=1;
buzzer=0;
TR0=1;
TR1=1;
}
while(run_key==0);
}
if(rst_key==0)
{
delay(5);
if(rst_key==0)
{
run_flag=0;
TR0=0;
TR1=0;
Count_A=0;
Count_B=0;
player_num=0;
time_off=0;
now_time=next_time;
buzzer=1;
}
while(rst_key==0);
}
if(run_flag==0&&time_off==0)
{
if(add_key==0)
{
        delay(5);
if(add_key==0);
{
next_time++;
now_time++;
}
while(add_key==0);
}
if(dec_key==0)
{
delay(5);
if(dec_key==0)
{
next_time--;
now_time--;
}
while(dec_key==0);
  }
}

}


void display(uint a,uint b)
{
P2=seven_bit[0];
P0=seven_seg[a];
delay(5);
P2=seven_bit[1];
P0=0X40;
delay(5);
P2=seven_bit[2];
P0=seven_seg[b/10];
delay(5);
P2=seven_bit[3];
P0=seven_seg[b%10];
delay(5);
P2=0xff;
}



void EX_Init()
{
uint TM0D = 0x11;
TH0 = 0x0D8;
TL0 = 0x0F0;
TH1 = 0x0D8;
TL1 = 0x0F0;
IE = 0x8b;
IT0 = 1;
IT1 = 1;
PX0 =1;
TR0 = 0;
TR1 = 1;
}



void main(void)
{
EX_Init();
buzzer=1;
P2=0xff;
P1=0xff;
P0=0xff;
next_time=now_time;
while(1);
{
keyScan();
display(player_num,now_time);
}
}



void Time0() interrupt 1
{
TH0 = 0x0D8;
TL0 = 0xF0;
//player_num=
if(run_flag==1)
{
player=P1;
switch(player)
{
case 0xfe:player_num=1;run_flag=0;time_off=1;TR0=0;TR1=0;break;
case 0xfd:player_num=2;run_flag=0;time_off=1;TR0=0;TR1=0;break;
case 0xfb:player_num=3;run_flag=0;time_off=1;TR0=0;TR1=0;break;
case 0xf7:player_num=4;run_flag=0;time_off=1;TR0=0;TR1=0;break;
case 0xef:player_num=5;run_flag=0;time_off=1;TR0=0;TR1=0;break;
case 0xdf:player_num=6;run_flag=0;time_off=1;TR0=0;TR1=0;break;
case 0xbf:player_num=7;run_flag=0;time_off=1;TR0=0;TR1=0;break;
case 0x7f:player_num=8;run_flag=0;time_off=1;TR0=0;TR1=0;break;
case 0xff:break;
default:player_num=9;break;
}
}
}
void Time1() interrupt 3
{
TH1 = 0x0D8;
TL1 = 0x0F0;
Count_A++;
Count_B++;
if(Count_B<50)
buzzer=0;
else buzzer=1;

if(Count_A==100)
{
Count_A=0;
now_time--;
if(now_time<=0)
{
now_time=0;run_flag=0;TR0=0;TR1=0;time_off=1;buzzer=0;
}
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:934353 发表于 2021-7-9 11:06 | 只看该作者
你定时器初始化的时候为啥一个开计时,一个不开计时?还有你player=P1,P1=0XFF,那你的Switch函数就没有意义,进去就直接跳出了,也就是说你的player_num恒等于0,数码管当然就不会亮了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表