单片机 倒计时-谁能帮我设计一个89c51的一个八人抢答器的汇编程序,万分感谢!!!

问题描述

谁能帮我设计一个89c51的一个八人抢答器的汇编程序,万分感谢!!!

1.数码管前一位显示抢答,后两位显示倒计时60s
2,p1.2为开始按钮

解决方案

//以前做过的,需要按你的要求改一改,望采纳。
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define D8279 XBYTE[0x5EFF] //8279 数据口地址
#define C8279 XBYTE[0x5FFF] //8279 状态/命令口地址
sbit beep=P3^2; //蜂鸣器
sbit l1=P1^0; //8个发光二极管
sbit l2=P1^1;
sbit l3=P1^2;
sbit l4=P1^3;
sbit l5=P1^4;
sbit l6=P1^5;
sbit l7=P1^6;
sbit l8=P1^7;
uchar code ledseg[] = {0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,
0x8e,0x8c,0xc1,0x89,0xc7,
0xbf,0x91,0x00,0xff};//LED显示常数表
uchar xuanshou,second,count;//
uchar score1,score2,score3,score4,score5,score6,score7,score8,score,xianshi;//选手1~8的分数
uint t,m,n,l,a1,a2,a3,a4,a5,a6,a7,a8,i;
uchar idata huanchong[5]={0,0,0,0,0}; //显示缓冲shijian,fenshu,xuanshou
bit bdata kbz; //按键表示值
void delay(uint z);
void Timer();
void disled(void);
void dis();
void init();
uchar getkey();
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--){
for(y=110;y>0;y--);
}

}
uchar getkey() //读键值函数
{
uchar key;
if((C8279&0x07)==0x00){
kbz=0; //无键按下,置标志
}

else{

kbz=1;
C8279=0x40; //读FIFO RAM命令
key=D8279;
key=(key&0x0f); //取键盘数据4位
return(key);
}

}
void tim(void) interrupt 1 using 1 //为定时中断TR0
{
TH0=0x3c; //重新赋值
TL0=0xb0;
count++;
if(count==20){ //20*50ms=1秒
count=0;
second--; //秒减1
if(second<=10&&m==1){
beep=1;delay(500);beep=0;
}
}
if(getkey()==0x0f){
TR0=0;xuanshou=0;t=0;beep=1;score=0;second=30;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;m=1;n=1;
}
}
void disled(void) //将缓冲区值显示出来
{

C8279=0x92;
for(i=0;i<=5;i++){
xianshi=huanchong[i];
D8279=ledseg[xianshi];
}
}
//-----显示处理-----
void dis()
{
huanchong[5]=xuanshou/10;
huanchong[4]=xuanshou%10; //选手号
huanchong[3]=score/10; //分数十位
huanchong[2]=score%10; //分数个位
huanchong[1]=second/10; //时间十位
huanchong[0]=second%10; //时间个位
disled();
}
void init() //初始化函数
{

t=0;
beep=1;
xuanshou=0;
score=0;
second=30;
score1=10;score2=10;score3=10;score4=10;score5=10;score6=10;score7=10;score8=10;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;

n=1;m=1;l=1;
C8279=0xDC; //清除 LED 显示
delay(1);
TMOD=0x01;
TH0=0x3c; //初值55536,计数10000次,每次1US,总计10ms
TL0=0xb0;
IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时
C8279=0x02; //置8279工作方式////youduaua//shuru
C8279=0x34; //置键盘扫描速率

PX1=1;
PT0=1;
ET1=1;
xianshi=0;
}

void main()
{
init(); //初始化,
while(1){

if(getkey()==0x0f){ //查询是否有犯规按键
TR0=0;xuanshou=0;t=0;beep=0;delay(200);beep=1;score=0;second=30;m=1;n=1;l=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;
dis();
}

if(getkey()==0x01&&n==1) {xuanshou=1;score=score1;dis();l1=0;beep=0;l=0;}
else if(getkey()==0x02&&n==1) {xuanshou=2;score=score2;dis();l2=0;beep=0;l=0;}
else if(getkey()==0x03&&n==1) {xuanshou=3;score=score3;dis();l3=0;beep=0;l=0;}
else if(getkey()==0x04&&n==1) {xuanshou=4;score=score4;dis();l4=0;beep=0;l=0;}
else if(getkey()==0x05&&n==1) {xuanshou=5;score=score5;dis();l5=0;beep=0;l=0;}
else if(getkey()==0x06&&n==1) {xuanshou=6;score=score6;dis();l6=0;beep=0;l=0;}
else if(getkey()==0x07&&n==1) {xuanshou=7;score=score7;dis();l7=0;beep=0;l=0;}
else if(getkey()==0x08&&n==1) {xuanshou=8;score=score8;dis();l8=0;beep=0;l=0;}
else if(getkey()==0x0e&&l==1) {beep=0;delay(200);beep=1;TR0=1; m=0;n=0;}//若有开始键,则初始化
if(n==0){
if(m==0)dis();
if(second==0){

t=0;
beep=1;delay(500);beep=0; //30秒定时到
TR0=0;n=1; //关中断,并使n等于1
dis();
if(getkey()==0x0f){
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;//是否有复位键
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
}
}
if(m==0){ //m等于零即处于抢答状态,查询选手键
if(getkey()==0x01) t=1;
else if(getkey()==0x02) t=2;
else if(getkey()==0x03) t=3;
else if(getkey()==0x04) t=4;
else if(getkey()==0x05) t=5;
else if(getkey()==0x06) t=6;
else if(getkey()==0x07) t=7;
else if(getkey()==0x08) t=8;
else if(getkey()==0x0f){
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
}
}
while(t){
if(getkey()==0x0f){
xuanshou=0;TR0=0;i=0;t=0;beep=0;delay(200);beep=1;score=0;second=30;m=1;n=1;//
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
}
if(m==0){ //开关,保证程序只执行一次
switch(t){
case 1:{
TR0=0;xuanshou=1;second=0;beep=0;delay(500);beep=1;
a1=0;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;l1=0;second=90;TR0=1;
break;
} //跳出循环
case 2:{
TR0=0;xuanshou=2;second=0;beep=0;delay(500);beep=1;
a2=0;a1=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;l2=0;second=90;TR0=1;
break;
}
case 3:{
TR0=0;xuanshou=3;second=0;beep=0;delay(500);beep=1;
a3=0;a1=1;a2=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;l3=0;second=90;TR0=1;
break;
}

case 4:{
TR0=0;xuanshou=4;second=0;beep=0;delay(500);beep=1;
a4=0;a1=1;a2=1;a3=1;a5=1;a6=1;a7=1;a8=1;m=1;l4=0;second=90;TR0=1;
break;
}
case 5:{
TR0=0;xuanshou=5;second=0;beep=0;delay(500);beep=1;
a5=0;a1=1;a2=1;a3=1;a4=1;a6=1;a7=1;a8=1;m=1;l5=0;second=90;TR0=1;
break;
}

case 6:{
TR0=0;xuanshou=6;second=0;beep=0;delay(500);beep=1;
a6=0;a1=1;a2=1;a3=1;a4=1;a5=1;a7=1;a8=1;m=1;l6=0;second=90;TR0=1;
break;
}
case 7:{
TR0=0;xuanshou=7;second=0;beep=0;delay(500);beep=1;
a7=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a8=1;m=1;l7=0;second=90;TR0=1;
break;
}

case 8:{
TR0=0;xuanshou=8;second=0;beep=0;delay(500);beep=1;
a8=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;m=1;l8=0;second=90;TR0=1;
break;
}
}

}
if(a1==0){
dis();
if(second==0){ //定时到
TR0=0;n=1; //关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
}
}
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score1+=1;
}
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score1-=1;
}
score=score1;
dis();
}
else if(a2==0){
dis();
if(second==0){ //30秒定时到
TR0=0;n=1; //关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){ //若此时再按下开始键,响铃提示,定时30s
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
}
}
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score2+=1;
}
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score2-=1;
}
score=score2;
dis();

}
else if(a3==0){
dis();
if(second==0){ //30秒定时到
TR0=0;n=1; //关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){ //若此时再按下开始键,响铃提示,定时30s
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
}
}
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score3+=1;
}
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score3-=1;
}
score=score3;
dis();

}
else if(a4==0){
dis();
if(second==0){ //30秒定时到
TR0=0;n=1; //关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){ //若此时再按下开始键,响铃提示,定时30s
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
}
}
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score4+=1;
}
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score4-=1;
}
score=score4;
dis();

}
else if(a5==0){
dis();
if(second==0){ //30秒定时到
TR0=0;n=1; //关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){ //若此时再按下开始键,响铃提示,定时30s
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
}
}
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score5+=1;
}
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score5-=1;
}
score=score5;
dis();

}
else if(a6==0){
dis();
if(second==0){ //30秒定时到
TR0=0;n=1; //关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){ //若此时再按下开始键,响铃提示,定时30s
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
}
}
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score6+=1;
}
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score6-=1;
}
score=score6;
dis();

}
else if(a7==0){
dis();
if(second==0){ //30秒定时到
TR0=0;n=1; //关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){
xuanshou=0;TR0=0;i=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
}
}
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score7+=1;
}
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score7-=1;
}
score=score7;
dis();

}
else if(a8==0){
dis();
if(second==0){ //30秒定时到
TR0=0;n=1; //关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
}
}
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score8+=1;
}
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score8-=1;
}
score=score8;
dis();

}

if(getkey()==0x0f){
xuanshou=0;TR0=0;i=0;t=0;beep=0;delay(200);beep=1;score=0;second=30;m=1;n=1;l=1;//

a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
}
}

}
}
}

解决方案二:

傻孩子,写个C语言的源程序,扔到Keil中反汇编一下,汇编程序不就出来啦?怎么这么傻

时间: 2024-09-20 04:20:02

单片机 倒计时-谁能帮我设计一个89c51的一个八人抢答器的汇编程序,万分感谢!!!的相关文章

c语言-求各位大师帮帮忙设计一个程序 C语言 写出代码

问题描述 求各位大师帮帮忙设计一个程序 C语言 写出代码 设计某班学生成绩管理系统,要求实现以下功能: 1.从键盘输入学号.姓名.各门课程成绩(不少于2门),并将其保存在文件中. 2.打开文件后,计算每个人的总分和平均分,排序并保存. 3.可以在文件中进行单项查询或多项查询的功能. 万谢 解决方案 人都这样,有了想法就不想写代码了,想叫别人写,所以才雇佣别人去做码农 解决方案二: 这种作业题在网上搜搜都会有的,比如这个http://blog.csdn.net/sdliujiangbo/artic

谁可以帮我设计一个类似于通讯录功能的程序?

问题描述 谁可以帮我设计一个类似于通讯录功能的程序? 这个程序只需要有3栏,姓名,号码,还有账号,输入姓名,它可以自己根据字母顺序排好,像手机通讯录那样自己排序,输入姓名,就可以查到后面的信息. 解决方案 有人帮忙设计一下吗?我可以出一些费用 解决方案二: 是设计还是开发?这个是不一样的..你想做的是Android APP吧?

单片机 倒计时-单片机倒计时仿真不成功

问题描述 单片机倒计时仿真不成功 程序编译成功,仿真图已完成,都是0错误0警告.链接仿真时,LED各引脚的灯都是在跳动,可是灯却始终不亮.哪位大神帮我调试下?发邮箱.

千万级-高并发WEB设计问题,来自一个面试题

问题描述 高并发WEB设计问题,来自一个面试题 这是一个面试题,困扰我好长时间了. 有个网站首页,需要满足千万级小数据量用户访问,首页上包含如下几部分: 1 统计部分,全站统计,与具体用户无关,与已存储的数据有关 2 静态页面部分 3 个人统计部分,与当前登录用户用惯,与已存储的数据有关,个人统计数据很少 4 数据部分,与具体内容无关,与已存储的数据有关.数据很少 要求: 1 满足千万级用户访问 2 前端可以负载,可以集群,可以异步 3 后端存储可以是DB,可以是内存,也可以是其他 4 技术 架

下载照片-谁能帮我写一个 能下载一个网站所有图片的 软件

问题描述 谁能帮我写一个 能下载一个网站所有图片的 软件 谁能帮我写一个 能够下载一个网站所有图片的小软件. 个人非常喜欢旅游.在网上有一个旅游网站.有好多驴友拍了世界各地的风景照片.但是一张一张的复制的话太费时间了.谁能帮我写一个软件.就是直接去那个网站的后台数据库中下载所有照片的小软件.跪求高手大大.帮帮我..谢谢.谢谢了 解决方案 你可以做一个网页抓取的功能,参数为指定网站地址.图片格式,基本上这样就能够实现你的需求

求大神帮下忙,小弟需要一个java连接sql server数据库实现查询功能的代码

问题描述 求大神帮下忙,小弟需要一个java连接sql server数据库实现查询功能的代码 如题 求大神给个查询功能的代码 做毕业设计需要 帮帮忙 下面附上添加功能的代码 public int Add(Client c) { int count=0; try { con=this.getcon(); String sql=String.format("insert Client values('%s',%d,'%s','%s','%s','%s','%s',0,'%s')", c.g

单片机 上电 正脉冲-STC89C52单片机刚上电就有一个正脉冲,万分感谢啊

问题描述 STC89C52单片机刚上电就有一个正脉冲,万分感谢啊 请教一个问题,在使用STC89C52单片机时,我初始化输出端口为0(低电平),但在刚上电的时,输出端口有个60ms左右的正脉冲(高电平),现在不知道怎么消除这个问题.(是不是单片机上电时都会有一个复位啊,所以会有一个高电平输出,如果是这样,怎么消除这个高电平啊)谢谢啊!程序如下:#include #define LED P1unsigned int timecount;void main(void){ LED=0x00; TMOD

响应式Web设计技巧及编写一个响应式页面实例

响应式 Web 设计技巧 什么是响应式设计? iOS 和 Android 的发布,智能手机.平板电脑.智能家电等新设备层出不穷,极大便利了我们的生活,但面对形形色色的终端设备,千差万别的屏幕分辨率,给网页设计带来了新的挑战,我们无法估计用户的终端设备和网络状况,更不可能为每种设备都专门设计一套网站,如何实现 Web UI 在多终端中的适配呢?2010 年 Ethan Marcotte 曾经在 A List Apart 发表过一篇文章"Responsive Web Design",响应式

编写一个单片机程序,通过一个钮子开关K1控制八只发光二极管的两种不同状态。

问题描述 编写一个单片机程序,通过一个钮子开关K1控制八只发光二极管的两种不同状态. 用AT89C51来完成实验.要求:1.使用P3口作为信号输入口,P1口作为信号输出口.2.若开关节K1接高电平时,八只二极管均处于点亮状态,并持续10秒,开关接低电平时,八只二极管处于交叉两灭状态,并持续5秒3.编写程序的首地址设为4000H. 解决方案 你这个是上课作业吧? 解决方案二: 要用汇编写程序啊...头痛..很久没用汇编了.. 解决方案三: 先画好流程图,用C语言编好程序,用keil编译,通过后就把