标题:
下面是单片机的六路抢答器,求高手帮忙注释一下,很多地方不懂啊!
[打印本页]
作者:
枫月——童话
时间:
2013-6-17 12:20
标题:
下面是单片机的六路抢答器,求高手帮忙注释一下,很多地方不懂啊!
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char code table[]={0xc0,0xf9,0xa4,
0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0};
sbit start=P3^6;
sbit reset=P3^7;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit key6=P1^5;
sbit key7=P1^6;
sbit key8=P1^7;
sbit jia=P3^4;
sbit jian=P3^5;
bit action = 0;
uchar second=10,a[7]={0};
uchar timer0_count = 0;
uchar number=0;
uchar number_display = 0;
uchar k;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void display(uchar number,uchar second)
{
P2 = 0x01;
P0 = table[second];
delay(1);
P2 = 0x02;
P0 = table[number];
delay(1);
P2 = 0x04;
P0 = table[a[0]];
delay(1);
P2 = 0x08;
P0 = table[a[1]];
delay(1);
P2 = 0x10;
P0 = table[a[2]];
delay(1);
P2 = 0x20;
P0 = table[a[3]];
delay(1);
P2 = 0x40;
P0 = table[a[4]];
delay(1);
P2 = 0x80;
P0 = table[a[5]];
delay(1);
}
void start_keyscan()
{
void fengling();
while(start == 0)
{
key7=0;
display(number_display,second);
if(start == 1)
{
key7=1;
action = 1;
TR0 = 1;
}
}
}
uchar key_scan8()
{
if(key1 == 0)
{
delay(8);
if(key1 == 0)
{
number = 1;
number_display = number;
}
}
if(key2 == 0)
{
delay(8);
if(key2 == 0)
{
number = 2;
number_display = number;
}
}
if(key3 == 0)
{
delay(8);
if(key3 == 0)
{
number = 3;
number_display = number;
}
}
if(key4 == 0)
{
delay(8);
if(key4 == 0)
{
number = 4;
number_display = number;
}
}
if(key5 == 0)
{
delay(8);
if(key5 == 0)
{
number = 5;
number_display = number;
}
}
if(key6 == 0)
{
delay(8);
if(key6 == 0)
{
number = 6;
number_display = number;
}
}
if(number_display != 0)
{
return number_display;
}
else
{
return 0;
}
}
void reset_keyscan()
{
if(reset == 0)
{
delay(8);
if(reset == 0)
{
number_display = 0;
second=10;
}
}
}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=0;
P2=0x00;
while(1)
{
reset_keyscan();
start_keyscan();
if(jia==0&&a[number-1]<9)
{
delay(10);
while(jia==0)
display(number_display,second);
a[number-1]=a[number-1]+1;
}
if(jian==0&&a[number-1]>0)
{
delay(10);
while (jian==0)
display(number_display,second);
a[number-1]=a[number-1]-1;
}
while(action)
{
while(!key_scan8())
{
display(number_display,second);
if(second == 0)
{
second = 10;
break;
}
}
TR0 = 0;
key7=0;
delay(80);
display(number_display,second);
key7=1;
action = 0;
break;
}
display(number_display,second);
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
timer0_count ++;
if(timer0_count == 20)
{
second --;
timer0_count = 0;
if(second==0)
{
key7=0;
delay(60);
key7=1;
}
}
}
作者:
admin
时间:
2013-6-17 15:25
是一个八路抢答器的单片机程序
作者:
livingliving
时间:
2015-4-7 19:03
不懂,但是还是要顶,安抚楼主受伤心灵,每一个新手都是痛苦的开始,快乐的结局
作者:
wx1235
时间:
2019-4-18 14:53
道到我的单片机里没用呀
作者:
a89588038
时间:
2019-4-18 15:20
在学习技术的时候,一定要多动脑筋,遇到问题后,三思而后问。
作者:
mdz2019
时间:
2019-4-18 16:08
key_scan8这个函数检测8个按键是否有按下的,检测到按键后返回number_display。
作者:
77777770
时间:
2023-12-20 14:51
六路抢答器怎么做,在线求
作者:
77777770
时间:
2023-12-20 14:52
下载进我的单片机了没用呀
作者:
LengmoAngel
时间:
2023-12-22 09:23
这段代码看起来是为了一个带有按钮的七段数码管计数器,可以用来递增和递减数字。它还包括一个倒计时器,从10倒数到0,下载进单片机没用有可能是你的引脚不对 比如原来是P1.0-7引脚,但是你单片机可能不是这个接口
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1