完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #include ***it key=P1^0; ***it led=P1^1; typedef unsigned char byte; typedef unsigned int word; static byte disp[5]; //byte table[] 内存放数码管码表 code byte table[11]={/*0,1,2,3,4,5,6,7,8,9,*/ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, }; /************************************************************ *函数名:bot *描 述:读取按键 *输入:无 *返回:有按键被按下则返回0,否则返回1 ************************************************************/ byte bot(void) //读取按键,有按键被按下则返回0,否则返回1 { if(key==0)return 0; else return 1; } /************************************************************ *函数名:display *描 述:将缓存区display[]中的整数译码后用数码管进行显示 *输 入:整形变量 ms *返 回:无 ************************************************************/ void display(word ms) //数码管上的显示反应时间 { byte posi=0x01,i,j,temp; disp[3]=ms/1000; //1s disp[2]=(ms%1000)/100; //100ms disp[1]=(ms%100)/10; //10ms disp[0]=ms%10; //1ms for(i=0;i<4;i++) //数码管显示 { temp=disp; temp=table[temp]; for(j=0;j<200;j++) //延时 { P2=posi; //显示xxxx秒形式 P0=temp; } posi*=2; } } /************************************************************ *函数名:random *描 述:调用系统随即函数 *输 入:无 *返 回:大的随机数 ************************************************************/ unsigned long random(void) //生成随机数 { word rt; byte k=0; srand (50000); //种下随机数种子,范围0-50000 rt=rand(); //生成随机熟 rt=rt*rand(); //使随机数足够大,能够延时足够时间 return rt; } /************************************************************ *描 述:定时器初始化子程序 *输 入:无 *返 回:无 *功 能:定时器0开中断程序,计数器1计算待测信号的脉冲熟 *************************************************************/ void INIT_TMR1(void) { TMOD=0x11; TH1=0xfc; TL1=0x66; TR1=1; } void delaylms(void) //延时1ms { INIT_TMR1() ; while(1) { if(TF1==1) { break; } } } void main(void) { byte k=0; k=bot(); //获取按键情况 P1=0xff; //输入前先把P1口都加高电平 while(1) //主循环开始 { word mstime=0,j; word r; while(bot()); //等待按键按下,否则始终等待 led=0; //按键被按下后,灯亮 r=random(); for (j=r;j>0;--j) //延时一段随机时间,为1马上的随机倍数 { delaylms(); k=bot(); if (k==1) //如果在灯灭前谈起按键,显示最长时间作为惩罚 { mstime=9999; goto loop; } } led=1; //灯灭 INIT_TMR1(); //初始定时状态 while(1) //如果按键弹起,反复进入定时状态,没1ms计时器溢出一次,毫秒数加1 { if(TF1==1) { TH1=0xfc; TL1=0x18; TR1=1; TF1=0; ++mstime; } if(k=bot()) break; } loop: led=1 ; while(1) { if(k==1) //按键弹开后始终显示时间 { k=bot(); display(mstime); } else //若按键按下,重新开始测试 { mstime=0; P2=0xff; break; } } } } |
|
相关推荐
2 个讨论
|
|
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11786 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 13:25 , Processed in 0.650228 second(s), Total 68, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号