51单片机挑战10秒免单
原理思路:
看了短视频里的火锅店搞了一个“挑战10秒免单”,学了大半年的单片机觉得这是生活中我为数不多的能大致实现的了,于是花了两天时间修修改改写成个下面这个“挑战10秒”。
原理其实很简单,就是用51单片机捕获高电平,纪录高电平也就是按下按钮的时间,当刚好按够10:00秒LCD的第二行显示'Victory!',否则显示'Defeat!'。为了显示'Victory!'我试了十多次才成功,看来想要免单还是很不容易的。
效果展示:
用51单片机“挑战10秒赢免单”
打包下载地址:
https://download.csdn.net/download/small_planet/33218591
https://download.csdn.net/download/small_planet/33218591
代码:
外部中断0,下降沿中断,松开按钮会触发这个中断,ic_sta高两位置10,表示完成一次挑战,可以接收下一次挑战
void exti0() interrupt 0 //注意:刚开始会有两次下降沿触发
{if(flag>0){ic_sta|=0x8000;ic_sta&=0xbfff; //让高两位变成10,其他位不变}else{flag++;}
}
定时器中断,定时器记的数溢出会触发这个中断
void time0() interrupt 1
{TH0=(65535-46083)/256; //1.085us,溢出一次50msTL0=(65535-46083)%256;if((ic_sta&0x4000)==0x0000) //第一次捕获到高电平{ic_sta=0x4001;}else //此前已经捕获到了高电平{ic_sta++;}
}
主函数,循环显示
int main()
{unsigned int i,t;unsigned char num[6]={'0','0',':','0','0','\0'};unsigned char victory[]={'V','i','c','t','o','r','y','!',' ',' ','\0'};unsigned char defeat[]={'D','e','f','e','a','t','!',' ',' ',' ','\0'};unsigned char goodluck[]={'G','o','o','d',' ','L','u','c','k','!','\0'};p10=1;time_init();LCD_Initial();while(1){count=ic_sta&0x3fff;time=50*count; //msfor(i=0,t=10000;i<5;i++){if(i==2){continue;}num[i]=time/t+'0';time-=(num[i]-'0')*t;t/=10;}delay(100);LCD_Initial();LCD_Print(0,0,num);if(ic_sta&0x8000) //已经完成一次挑战{if(num[0]=='1'&&num[1]=='0'&&num[3]=='0'&&num[4]=='0'){LCD_Print(0,1,victory);}else{//Defeat!LCD_Print(0,1,defeat);}}else{//Good Luck!LCD_Print(0,1,goodluck);} }}
51单片机挑战10秒免单相关推荐
- 单片机0 10秒计时C语言,基于单片机的秒,分,时的精确计时实现
这个学期接触到了单片机,算是个微处理机,是把计算机的部分功能集成化了的.在生活中随处可见:想厨房用的电磁炉内就集成了单片机的控制,客厅挂的数字万年历也是用单片机实现的!经过了解后,我对此产生了极大的兴 ...
- 51单片机LED 1秒闪烁
1.单片机晶振的脉冲的频率和周期为 F = f/12 = 11.0592M/12 = 0.9216MHZ T = 1/F = 1.085us 2.在主频为11.0592M时,每计一个脉冲为1 ...
- CC2530,51单片机 延时一秒程序 循环次数 算法
//计算 //单片机每秒执行的指令数:频率*1 (例:cc2530频率为)32MHz //8051效率是PC的12分之一 //循环需要执行5条指令 //公式为 32* ...
- 单片机60秒秒表c语言,基于51单片机的60秒,秒表计时器
keil软件生成HEX文件,在proteus仿真实现 C程序 #include #define uint unsigned int #define uchar unsigned char uchar ...
- 51单片机编写60秒倒计时程序
#include <reg52.h> #define guan P0 #define wei P2 #define uchar unsigned char #define uint uns ...
- 51单片机,时钟频率,机器周期,与执行指令的时间
前言 单片机在执行语句时,需要特定的频率或者说"节奏",提供节奏的单元一般有两种:外部晶振以及内部RC震荡.晶振很在开发板上很常见,一般都是8Mhz或者12Mhz的.RC震荡单元我 ...
- 基于单片机的c语言倒计时程序,30秒倒计时c语言51单片机实现.doc
30秒倒计时c语言51单片机实现 原理图: 程序: #include #define uchar unsigned char #define uint unsigned int sbit dula=P ...
- 59s计时器C语言程序步骤详解,51单片机00-59秒计时器 0-59s Timer
51单片机00-59秒计时器 0-59s Timer 1. 实验任务 如下图所示,在AT89S51单片机的P0和P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个 ...
- 51单片机数码管显示60秒倒计时(C语言)
51单片机数码管显示60秒倒计时(C语言) 基于普中51单片机开发板,运用定时器/计数器0和1,实现60秒的倒计时和LED灯0.5s间隔闪烁 文章目录 51单片机数码管显示60秒倒计时(C语言) 前言 ...
最新文章
- 第五周项目四-长方柱形(1)
- tc-auth-lib学习笔记
- 《Android游戏开发详解》一2.16 区分类和对象
- boost::mp11::tuple_for_each相关用法的测试程序
- edge浏览器如何把网页放到桌面_电脑如何添加便签,便签怎么放到桌面上
- 史上速度最快!DNS 公共服务 1.1.1.1 正式发布
- 第十章:基本数据结构(2)
- Android手机中第三方签名应用程序无法获得的permission
- matlab计算abc三相短路电流_变频电源的安装及单相/三相变频电源电流计算公
- 21世纪最牛逼思想家的心路历程小结———哲学、宿命论
- 解决The kernel appears to have died. It will restart automatically问题
- 计算机毕业设计太难做不出来怎么办?
- 惠普103a打印机芯片清零_惠普M104a打印机的粉盒CF218A,芯片怎么取下来啊
- 【echarts地图制作】下钻到乡镇/街道级别的
- 运筹学 基础 知识点总结 (八)
- 【ACM- OJ】《Oulipo》C++
- Node.js 的安装(电脑win7支持的版本)
- 2022-05-14前端周报 巴厘岛项目交接完成
- 谷歌 Pixel 手机阻止用户拨打报警电话
- 计算机配件进口关税走势,计算机类产品关税降50% 从20%下调至10%