网上有关“单片机抢答器代码”话题很是火热,小编也是针对单片机抢答器代码寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
您好:手机麻将有挂是真的吗这款游戏可以开挂,确实是有挂的,咨询加微信【】很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实际上这款游戏确实是有挂的
1.手机麻将有挂是真的吗这款游戏可以开挂,确实是有挂的,通过添加客服微信
2.咨询软件加微信【】在"设置DD功能DD微信手麻工具"里.点击"开启".
3.打开工具.在"设置DD新消息提醒"里.前两个选项"设置"和"连接软件"均勾选"开启"(好多人就是这一步忘记做了)
4.打开某一个微信组.点击右上角.往下拉."消息免打扰"选项.勾选"关闭"(也就是要把"群消息的提示保持在开启"的状态.这样才能触系统发底层接口)
//这是六路抢答器,八路的话就是相应位显示,而不是不显示,ox00为清屏功能,如下
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x00}; ///gong yin ji
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Keyscan()
* 功能 : 实现按键的读取。下面这个子程序是按处理 矩阵键盘 的基本方法处理的。
* 输入 : 无
* 输出 : 按键值
***********************************************************************/
uchar Keyscan(void)
{
uchar i,j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7}; //让矩阵键盘的每行分别为低电平
for(j=0; j<4; j++)
{
P1 = Buffer[j];
temp = 0x10;
for(i=0; i<4; i++)
{
if(!(P1 & temp)) //判断P1口高4位某一行为低电平
{
return (i+j*4); //返回键码
}
temp <<= 1;
}
}
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar Key_Value; //读出的键值
int k=0;
while(1)
{
P1 = 0xf0;
if(P1 != 0xf0) //判断有无按键按下
{
Delay_1ms(20); //按键消抖
if(P1 != 0xf0) //第二次判断有无按键按下
{
Delay_1ms(20); //按键消抖
if(P1 != 0xf0) //第三次判断有无按键按下
{
k++;
Key_Value = Keyscan();
}
}
}
if(k==1)
{
P0 = table[Key_Value];
P2 = 0x07;
}
if(Key_Value==15)
{
k=0;
P0 = table[Key_Value];
P2=0x07;
}
}
}
单片机设计的四人抢答器
抢答器的基本部分原理:
一人按键后,显示出该人编号,其他人再按键无效。那么只一人输入信号后,使其它人输入无效,且区分出是那一位选手输入即可。
单片机做法原理:
键盘分先手1~15号和主持人复位键,对4X4键盘进行扫描。对所输入的键盘进行扫描。当主持人按下键时开始计时,这时比赛开始。如果选手按键后则输出显示对应的选手号,并且对再输入的选手信号进行屏蔽,直到主持人重新按下复位键,这时新的一轮比赛开始。
原程序如下:
#include <wanggl.h> //一些常用的输入输出函数
#define uchar unsigned char
void delay1 (uchar n);
void shijian(void);
main()
{
uchar? k,p; //k为扫描结果,p为判断是否有键按下
uchar? key,key1;//key为按入键对应的十六进制(或为十进制的个位)
//key1为十六进制转换十进制的十位
p=0;
while(1)
{
shijian(); //调用显示时间函数
loop:
k=KeyScan(); //扫描键盘函数
key=KeyLED(k); //将扫描键盘的数值转换成十六进制
if((k!=0x11)&&(!p)) //0x11为复位键 p=1为有键按下
{ //显示字符
key1=0xff;
if(k<0x25) //如果输入字符大于9将键盘扫描为<0x25的值
{
key1=0x9f; //十位数显示1
switch(k) //个位数显示
{
case 0x24: key=0x03; break;// 0
case 0x22: key=0x9f; break;// 1
case 0x21: key=0x25; break;// 2
case 0x18: key=0x0d; break;// 3
case 0x14: key=0x99; break;// 4
case 0x12: key=0x49; break;// 5
default:break;
}
}
ShowLED(key);
ShowLED(key1);
ShowLED(0xff);
ShowLED(0xff);
p=1;
}
if (k==0x11)
{
ShowLED(0x03);
ShowLED(0x03);
ShowLED(0x03);
ShowLED(0x03);
// while(KeyScan()==0x11);
p=0;
}
while(KeyScan()==k);
if(p) goto loop;
}
}
/*####################################################################
功能:shijian
描述:计时
参数:无
返回:无
影响:VLED显示计时
###################################################################*/
void shijian(void)
{
uchar i,j,k,l;//给定循环变量
for (i=0;i<10;i++)//十分循环
{
for(j=0;j<10;j++)//分钟循环
{
for(k=0;k<6;k++)//十秒循环
{
for(l=0;l<10;l++)//秒循环
{
ShowLED(uCharTo8421(l));//右起第1个LED
ShowLED(uCharTo8421(k));//右起第2个LED
ShowLED(uCharTo8421(j));//右起第3个LED
ShowLED(uCharTo8421(i));//右起第4个LED
delay1(3);//延时1秒处理
if(KeyScan()) return;
}
}
}
}
}
/*####################################################################
功能:delay1
描述:延时1秒处理
参数:无
返回:无
影响:无
###################################################################*/
void delay1 (uchar n)
{
uchar i,j,k;
for(i=0;i<116;i++)
for(j=0;j<100;j++)
for(k=0;k<n;k++)
if(KeyScan()) return;
}
如果有电路原理图就更好分析了。。。
org 0000h
ajmp main ; ;上电自动转向主程序
org 0003h ;外部中断0入口
ajmp start ; ;转向start 子程序
org 000bh ;定时器T0中断入口
ajmp time ; 转向time子程序
org 0030h ; ;主程序首地址
main: mov tmod,#1; 0000 0001 置T/C 1为方式0,计数 ;置T/C 0为方式1,定时
mov th0,#0b1h; ;送T/C 0定时初值
mov tl0,#0e0h
mov ie, #83h ; ;设置中断
setb tr0 ;启动T0
mov r3,#0
mov r4,#0
mov 30h,#0; ;显示秒表的个位LED数码管清零
mov 31h,#0; ;显示秒表的十位LED数码管清零
mov 32h,#0; ;显示选手号的LED数码管清零
disp: mov sp,5fh
mov a,#03h ; 0000 0011 ;对8155初始化,A口、B口输出,C口输入
mov dptr,#0ff20h ;控制口的地址
movx @dptr,a ;写8155控制字
loop: mov r5,#1 ; ;置字位码初值
mov r0,#30h ; ;置显示缓冲区指针初值
mov a,r5
loop1: mov dptr,#0ff21h ; ;字位码送8155 A口
movx @dptr,a ;把a的值送到A口
mov dptr,#0ff22h ;8155 B口
mov a,@r0
add a,#0eh ;a=0FH 0eH=14=1+2+1+1+3+1+1+2+2 (跳过14个字节)
movc a,@a+pc ; ;查字位码表
movx @dptr,a ; ;字形码送8155 B口 (本指令占1个字节)
acall dlay ; ;延时1MS (本指令占2个字节)
inc r0 ; (本指令占1个字节)
mov a,r5 ; (本指令占1个字节)
jb acc.2,ld ; (本指令占3个字节)
rl a ; (本指令占1个字节)
mov r5,a ; (本指令占1个字节)
ajmp loop1 ; (本指令占2个字节)
ld: sjmp loop ; ;周而复始 ; (本指令占2个字节)
table:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0c8h ; 共阳 字形码表
; 0 1 2 3 4 5 6 7 8 9 0
dlay: mov r7,#02h ; ;延时子程序,大约延时2*255+2*2+2*2us=518us
dl1: mov r6,#0ffh
dl2: djnz r6,dl2
djnz r7,dl1
ret ; ;子程序返回而非中断返回,两者不一样
time: mov th0,#0b1h ; ;重新装入计数初值
mov tl0,#0e0h
push psw ; ;保护现场
push acc
mov a,#0fh
orl p1,a ;p1口低四位输出高电平
mov a,p1 ;读P1口
anl a,#0fh ;屏蔽高四位
cjne a,#0,go_on ;A低四位不为零就转移到go_on
inc r3 ;
cjne r3,#25,back ;r3不等于25就转移到back,即直接返回
mov r3,#0 ;如果r3等于25了,就把r3的值清零
inc r4
mov a,r4
mov b,#10
div ab ;r4除以10,以分离出个位和十位。个位(余数)放在b,十位(商)放在a
mov 31h,a
mov 30h,b
cjne r4,#20,back ; 判断是否到20秒
cpl p1.7 ; ;到20秒红灯亮警告
mov 32h,#10
clr tr0 ; ;停止T/C 0计时
sjmp back
go_on: clr tr0
jnb acc.0,two ; ;判断是不是一号选手按键,若不是,转向二号
mov 32h,#01h ; ;LED显示1
sjmp back
two: jnb acc.1,three ; ;判断是不是二号选手按键,若不是,转向三号
mov 32h,#02h; ;LED显示2
sjmp back
three: jnb acc.2,four ; ;判断是不是三号选手按键,若不是,转向四号
mov 32h,#03h ; ;LED显示3
sjmp back
four: mov 32h,#04h ; ;LED显示4
back: pop acc
pop psw
reti ; ;中断返回
start: setb tr0
reti ; ;中断返回
end
关于“单片机抢答器代码”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!