基于AW60十秒倒计时抢答器的设计 - 图文(4)

2019-09-01 10:19

//-------------------------------------------------------------------------* interrupt void isrKeyBoard(void) {

uint8 value,KeyDef; uint16 i;

for(i=0; i<1000; i++);

DisableInterrupt(); //关总中断 DisableKBint(); //屏蔽键盘中断

value = KBScanN(10); //扫描键值,存于value中 if(value!=0xFF) {

KeyDef=KBDef(value);

if(KeyDef=='*') {

flag=0; //键值按下标志位 start=1; //启动减数 Buzzer=0; //关闭蜂鸣器 //对数码管重新回到计时初值 ledbuf[0]='0'; ledbuf[1]='0'; ledbuf[2]='1'; ledbuf[3]='0'; num=11; }

if(KeyDef!='*'&&num>0) {

start=0;

//用flag来对数据进行锁存 if(flag==0) {

第 16 页

ledbuf[0]=KeyDef; flag=1; } } }

KBInit(); //键盘初始化键盘中断 EnableKBint(); //开放键盘中断 EnableInterrupt() ; //开总中断 }

//-------------------------------------------------------------------------* //函数名: isrT1Out * //功能: 定时器1溢出中断处理函数,以秒为最小单位计时, * //并清定时器1溢出标志位 * //参 数: 无 * //返 回: 无 * //说 明: 无 * //-------------------------------------------------------------------------* interrupt void isrT1Out(void) //溢出时间0.5s {

uint8 temp;

DisableInterrupt(); //禁止总中断

if(start==1) {

//数码管显示数值每隔1s减1 if(num!=0)num--; else num=0;

//判断数码管状态是否减到0,若没有则数码管减1显示 if(num!=0) {

ledbuf[2]='0';

第 17 页

ledbuf[3]=num-1+'0'; } else {

//数码管则显示“0000”并闪烁 LEDdata=0xc0; LEDcs1=0x03; LEDcs2=0x0c;

Delay(7); //延时使数码管显示闪烁 LEDdata=0xff; Delay(7); LEDdata=0xc0; //实现蜂鸣器的报警鸣叫 Buzzer=1; Delay(30); } }

if(start==0) {

//数码管则显示“0000”并闪烁 if(num>0) {

//如果在10s内有键按下,则LED显示抢答者编号以及当前时间,并闪烁显示

LEDshow(ledbuf); LEDcs1=0x03; LEDcs2=0x0c;

Delay(3); //延时使数码管显示闪烁 LEDdata=0xff;Delay(3);

第 18 页

LEDshow(ledbuf); }

if(num==0) {

//如果在10s内没有键按下,则LED显示0000并闪烁显示 LEDdata=0xc0; LEDcs1=0x03; LEDcs2=0x0c;

Delay(3); //延时使数码管显示闪烁 LEDdata=0xff;Delay(3); LEDdata=0xc0; } }

TPM_MODH(1) = 0x7a; TPM_MODL(1) = 0x12;

//清定时器1溢出标志位

temp = TPM_CSTR(1); //读取定时器1状态和控制寄存器TPM1SC

TPM_CSTR(1) &= ~(TPM1SC_TOF_MASK); //向定时器溢出标志位TOF写0

EnableInterrupt(); //开放总中断 }

//未定义的中断处理函数,本函数不能删除 interrupt void isrDummy(void) { }

//中断处理子程序类型定义 typedef void( *ISR_func_t)(void);

//中断矢量表,如果需要定义其它中断函数,请修改下表中的相应项目

第 19 页

const ISR_func_t ISR_vectors[] @0xFFCC = {

isrDummy, //时基中断 isrDummy, //IIC中断 isrDummy, //ADC转换中断 isrKeyBoard, //键盘中断 isrDummy, //SCI2发送中断 isrDummy, //SCI2接收中断 isrDummy, //SCI2错误中断 isrDummy, //SCI1发送中断 isrDummy, //SCI1接收中断 isrDummy, //SCI1错误中断 isrDummy, //SPI中断

isrDummy, //TPM2溢出中断

isrDummy, //TPM2通道1输入捕捉/输出比较中断 isrDummy, //TPM2通道0输入捕捉/输出比较中断 isrT1Out, //TPM1溢出中断

isrDummy, //TPM1通道5输入捕捉/输出比较中断 isrDummy, //TPM1通道4输入捕捉/输出比较中断 isrDummy, //TPM1通道3输入捕捉/输出比较中断 isrDummy, //TPM1通道2输入捕捉/输出比较中断 isrDummy, //TPM1通道1输入捕捉/输出比较中断 isrDummy, //TPM1通道0输入捕捉/输出比较中断 isrDummy, //ICG的PLL锁相状态变化中断 isrDummy, //低电压检测中断 isrDummy, //IRQ引脚中断 isrDummy, //SWI指令中断

//RESET是特殊中断,其向量由开发环境直接设置(在本软件系统的Start08.o文件中) };

第 20 页


基于AW60十秒倒计时抢答器的设计 - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:甘肃省2016年上半年绿化工(高级)技能操作试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: