标题:
51单片机C语言背景抢答器,程序如下,运行不报错,但是在板子上什么都显示不出来...
[打印本页]
作者:
聪明勇敢
时间:
2021-7-6 10:25
标题:
51单片机C语言背景抢答器,程序如下,运行不报错,但是在板子上什么都显示不出来...
#include<reg52.h>
#define uchar unsigned char
#define unit unsigned int
uchar num;
uchar num1;
uchar flag1,flag2;
uchar flag3,flag4=0;
uchar code table[]={
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
};
sbit dula=P1^6;
sbit wela=P1^7;
sbit sp=P3^0;
sbit clear=P1^0;
sbit start=P1^1;
sbit key1=P1^2;
sbit key2=P1^3;
sbit key3=P1^4;
sbit key4=P1^5;
void delay(int z)
{
int i,j;
for(i=z;i>0;i++)
for(j=110;j>0;j--);
}
void beep()
{
sp=0;
delay(500);
sp=1;
}
void display(int a)
{
wela=1;
P2=0xFF;
wela=0;
dula=1;
P2=table[a];
dula=0;
P2=0xFF;
wela=1;
P2=0xFD;
wela=0;
delay(5);
}
void clr()
{
dula=1;
P2=table[0];
dula=0;
P2=0xFF;
wela=1;
P2=0xFC;
wela=0;
delay(5);
}
void dis30s()
{
uchar shi,ge;
shi=num1/30;
ge=num1%30;
wela=1;
P2=0xFF;
wela=0;
dula=1;
P2=table[shi];
dula=0;
P2=0xFF;
wela=1;
P2=0xFE;
wela=0;
delay(5);
wela=1;
P2=0xFF;
wela=0;
dula=1;
P2=table[ge];
dula=0;
P2=0xFF;
wela=1;
P2=0xFD;
wela=0;
delay(5);
}
void player()
{
if(key1==0&&flag4==0)
{
delay(10);
if(key1==0&&flag4==0)
{
display(1);
TR0=0;
flag1=flag2=0;
flag4=1;
beep();
while(!key1);
}
}
if(key2==0&&flag4==0)
{
delay(10);
if(key2==0&&flag4==0)
{
display(2);
TR0=0;
flag1=flag2=0;
flag4=1;
beep();
while(!key2);
}
}
if(key3==0&&flag4==0)
{
delay(10);
if(key3==0&&flag4==0)
{
display(3);
TR0=0;
flag1=flag2=0;
flag4=1;
beep();
while(!key3);
}
}
if(key4==0&&flag4==0)
{
delay(10);
if(key4==0&&flag4==0)
{
display(4);
TR0=0;
flag1=flag2=0;
flag4=1;
beep();
while(!key4);
}
}
}
void keyscan()
{
if(clear==0&&flag2!=1)
{
delay(10);
if(clear==0&&flag2!=1)
{
while(!clear);
flag1=0;
flag2=0;
flag3=0;
flag4=0;
num=0;
num1=10;
clr();
flag1=1;
}
}
if(flag1==1)
{
if(start==0&&flag3==0)
{
delay(10);
if(start==0&&flag3==0)
{
flag2=1;
flag3=1;
while(!start);
}
}
}
if(flag2==1)
{
TR0=1;
dis30s();
player();
}
}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
while(1)
{
keyscan();
}
}
void T0_ser() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)
{
num=0;
num1--;
}
if(num1==0)
{
TR0=0;
flag1=0;
flag2=0;
num=0;
num1=30;
clr();
beep();
}
}
作者:
lkc8210
时间:
2021-7-6 16:57
代码没有注释,变数名又没有意义,看得很头疼
dula是什么意思?
wela是什么意思?
flag1 到 flag4各自代表的含义是什么?
shi是十位?为甚么要除30?正常不是除10的吗?
ge是个位?为甚么要模30?正常不是模10的吗?
如果num1 = 29, ge就等于29,table[ge]不就爆炸了吗?
作者:
sadv
时间:
2021-7-6 17:10
确实看的头疼,是不是看的郭天祥老师的,貌似只有他的书会写shi,ge这个变量名,多看看书,找找异同,建议先无脑抄一份代码,运行成功之后一点点去改里面的东西,这样子你就知道整个程序是怎么运行起来的,每一个函数,每一条语句是什么作用
作者:
man1234567
时间:
2021-7-8 08:31
没有硬件图,没有软件注释,呵呵
作者:
1543330241
时间:
2021-7-8 12:19
用的是开发板吗,看看数码管共阴、共阳的,先把数码管调通了,再接着干
作者:
design003
时间:
2021-7-8 15:58
先把硬件原理图搞明白了 再分析程序吧
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1