c语言五人抢答器源程序,基于AT89S52的八路抢答器C语言源程序.doc

C语言源程序

#include#define unchar unsigned char

#define unit unsigned int

#define Data_port P0 //数码管数据口

#define Bit_sel_port P1 //数码管位选口

#define Key_port P2//抢答按键输入口

sbit Bee=P3.7; //蜂鸣器控制引脚

unit timer_out=60;//定时60s

unit Count=0;

unit single=0;//个位

unit decade=6;//十位

unit n;

unit i;

unchar start_flag=0;//启动抢答标志

unchar ans_flag=0;//已抢答标志

unit seg_tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//七段数码管字形表

void Delay(i)//延迟函数

{

for(;i>0;i--);

}

void Display_time()//显示抢答时间

{

Bit_sel_port=0x01;

Data_port=seg_tab[decade];

Delay(200);

Bit_sel_port=0x02;

Data_port=seg_tab[single];

Delay(200);

}

void Display_num_time()//显示抢答组编号和时间

{

Bit_sel_port=0x01;

Data_port=seg_tab[decade];

Delay(200);

Bit_sel_port=0x02;

Data_port=seg-tab[single];

Delay(200);

Bit_sel_port=0x04;

Data_port=seg_tab[n];

Delay(200);

}

main()

{

EX0=1;//开外部中断INT0

IT0=1;//外部中断方式为下降沿

TMOD=0x01;//定时/计时器0工作与模式1

TH0=0xd8;

TL0=0xef;

ET0=1;//开定时/计数器0中断,定时20ms

Bee=0;//蜂鸣器停止

EA=1;//开关中断

while(1)

{

if(star_flag==0)//抢答未开始

{

if(Key_port!=0xFF)

{

Bee=1;//蜂鸣器启动,抢答违规处理

while(1);//进入死循环,按复位键重新启动

}

}

else//抢答开始

{

if(ans_flag!=1)//无人抢答,显示时间

Dislay_time();

else//显示时间和抢答组编号

Delay_num_time();

}

}

void Interrupt0() interrupt0

{

Bee=1;//提示开始抢答

Delay(200);

Bee=0;

TR0=1;//启动抢答后使能定时器

start_flag=1;//启动抢答标志置位

}

void Timer0() interrupt1

{

TH0=0xd8;

TL0=0xef;

Count++;

if(Count==50)

{

Count=0;

timer_out--;

}

if(timer_out!=0&&Key_port==0xff)

//如果时间未到且无抢答键按下

{

decade=timer_out/10; //显示当前剩余时间

single=timer_out%10;

ans_flag=0;

}

if(time_out==0) //超时时间到,启动蜂鸣器,停止计时器

{

Bee=1;

EA=0;

}

if(timer_out!=0&&Key_port!=0xff)

//如果时间未到且抢答键按下

{

switch(Key_port)

{

case 0xfe:n=1;ans_flag=1;EA=0;break;

case 0xfd:n=2;ans_flag=1;EA=0;break;

case 0xfb:n=3;ans_flag=1;EA=0;break;

case 0xf7:n=4;ans_flag=1;EA=0;break;

case 0xef:n=5;ans_flag=1;EA=0;break;

case 0xdf:n=6;ans_flag=1;EA=0;break;

case 0xbf:n=7;ans_flag=1;EA=0;break;

case 0x7f:n=8;ans_flag=1;EA=0;break;

default:break;

}

}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
发一个功能比较全面的考试系统(VS2005+SQL2000) 发一个我开发的功能全面的考试系统 本系统开发环境是VS2005+SQL2000,是我在实习单位时独立做的一个项目,三层架构,参考了多个考试系统而开发的,题型有单选题、多选题、判断题、填空题和问答题(或者也可以说是简答题)。 说一下我的开发体会: 1、从网上看到的试卷的题型几乎是没有问答题的,前不久我下载了一个,有简答题,但奇怪的是后台没有那个评阅试卷,直接在前台自动评卷的,这就有问题了,因为如果是填空题的话,就可以比较用户输入的几个字是否和数据库中的答案相同,但简答题的回答一般都有几十个字吧,用户不可能每个字都和数据库中的答案相同,这虽然可以比较,但是和现实是不符合的。所以我在后台增加了“试卷评阅”这个功能,它可以把用户在前台页面的回答保存下来,然后在后台把用户选择选择哪道题,输入什么字都能一模一样的显示出来,这个是我认为最大的优点,在目前我见到的考试系统中还没有见到过。在“试卷评阅”中,除了“问答题”是手动输入的外,其它题型都是系统自动判分的。 2、加入了权限管理,系统分为三种用户,管理员、教师和学生,管理员可以设定教师有哪些权限。 3、“在用户管理”这一模块中,还增加了一个“重置密码”的功能,如果用户忘记密码了,管理员则可以把用户的密码重置为6位的随机数字。 4、系统的登陆只用了一个界面,不用单选按钮就可以实现三种用户的智能登陆,会自动根据身份跳转到相应的页面。另外还用了Cookie实现了记住用户名。 5、学生登陆成功后,可以修改个人密码,查看考试记录,也可以选择考试。 6、界面美观方面,我也弄了很久,虽然不敢说很美,但绝对是不错的。 7、基本上我所学的东西都在这里了,比如密码MD5加密;GridView中CheckBox全选删除、只允许选择一个;GridView鼠标移动行就变色;GridView列字数过多时省略后面的字;删除时弹出是否确定对话框;GridView模板中获取用户的输入;多条件搜索的查询;权限管理。。。。。希望对初学.NET的朋友有帮助。 后台模块包括: 个人信息管理 修改密码 部门信息管理 部门管理 用户信息管理 用户管理 权限设置 试卷制定维护 试卷制定(随机出题、人工出题) 试卷维护 用户试卷管理 试卷评阅 用户成绩 试题类别管理 单选题维护 多选题维护 判断题维护 填空题维护 问答题 原版本下载地址为:http://www.51aspx.com/CV/OnlineExam/,当前版本主要改进的地方有: 其实我主要就是以多功能在线考试系统源码为基础开发的,改进了很多东西。不同之处主要如下: 多功能在线考试系统 ## 我的考试系统 两个登陆界面,管理员和学生分开登陆 ##一个登陆界面,根据不同角色进入不同的页面。 简单的用户管理 ## 部门管理、修改密码、用户查询、重置密码、\ ## 根据角色授予某个权限 学生登陆时只能选择试卷考试 ## 加入了修改密码、查看考试记录:成绩、评语.. 单选、多选、填空、判断 ## 单选、多选、填空、判断、问答 试卷随机出题 ## 试卷随机出题、自由选择出题 试卷前台自动评阅 ##试卷后台评阅(因为加入了问答题) 后台管理导航树TreeView ## 权限树,Tree.cs类实现 还有很多小处的东西也改进了,比如原来“试卷管理”试卷的状态只能手动输入True或False,我把试卷的状态改为下拉框“可用”、不可用;登陆界面加入了验证码、记住用户名;加入了很多整数的正则表达式验证; 修改GridView美观;是否删除确认;把填空题TextBox的方框变成一个下划线;密码用MD5;页面布局;暂时只想到这些了,我觉得最大的不同之处就是试卷后台评阅,当时单独弄这个弄了几天,网上下载的那些考试系统都没有这个功能,最后自己想方设法,代码一改再改最终实现了。因为水平有限,所以应该有不少还没发现的BUG,我学习ASP.NET的时间是从今年三月份做毕业设计开始的(以前只是大二时学过这门课程的一点点东西),到现在差不多三个月,所幸这学期没有课程了,可以全心全意的学习.NET技术了,个人感觉动手输入代码的实践对提高水平真的很重要,有很多东西虽然书上有,看起来不难,但离开书本,真正实践起来,却会有一点朦胧无从下手的感觉,还有很多东西也是要动手之后才对它的功能有一个确实的认识。 DB_51aspx下为Sql数据库文件,默认登陆帐号/密码:admin/admin

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值