原理思路:

看了短视频里的火锅店搞了一个“挑战10秒免单”,学了大半年的单片机觉得这是生活中我为数不多的能大致实现的了,于是花了两天时间修修改改写成个下面这个“挑战10秒”。

原理其实很简单,就是用51单片机捕获高电平,纪录高电平也就是按下按钮的时间,当刚好按够10:00秒LCD的第二行显示'Victory!',否则显示'Defeat!'。为了显示'Victory!'我试了十多次才成功,看来想要免单还是很不容易的。

效果展示:

用51单片机“挑战10秒赢免单”

打包下载地址:

https://download.csdn.net/download/small_planet/33218591https://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秒免单相关推荐

  1. 单片机0 10秒计时C语言,基于单片机的秒,分,时的精确计时实现

    这个学期接触到了单片机,算是个微处理机,是把计算机的部分功能集成化了的.在生活中随处可见:想厨房用的电磁炉内就集成了单片机的控制,客厅挂的数字万年历也是用单片机实现的!经过了解后,我对此产生了极大的兴 ...

  2. 51单片机LED 1秒闪烁

    1.单片机晶振的脉冲的频率和周期为 F = f/12 = 11.0592M/12 = 0.9216MHZ      T = 1/F = 1.085us 2.在主频为11.0592M时,每计一个脉冲为1 ...

  3. CC2530,51单片机 延时一秒程序 循环次数 算法

    //计算 //单片机每秒执行的指令数:频率*1                 (例:cc2530频率为)32MHz //8051效率是PC的12分之一 //循环需要执行5条指令 //公式为  32* ...

  4. 单片机60秒秒表c语言,基于51单片机的60秒,秒表计时器

    keil软件生成HEX文件,在proteus仿真实现 C程序 #include #define uint unsigned int #define uchar unsigned char uchar ...

  5. 51单片机编写60秒倒计时程序

    #include <reg52.h> #define guan P0 #define wei P2 #define uchar unsigned char #define uint uns ...

  6. 51单片机,时钟频率,机器周期,与执行指令的时间

    前言 单片机在执行语句时,需要特定的频率或者说"节奏",提供节奏的单元一般有两种:外部晶振以及内部RC震荡.晶振很在开发板上很常见,一般都是8Mhz或者12Mhz的.RC震荡单元我 ...

  7. 基于单片机的c语言倒计时程序,30秒倒计时c语言51单片机实现.doc

    30秒倒计时c语言51单片机实现 原理图: 程序: #include #define uchar unsigned char #define uint unsigned int sbit dula=P ...

  8. 59s计时器C语言程序步骤详解,51单片机00-59秒计时器 0-59s Timer

    51单片机00-59秒计时器 0-59s Timer 1.  实验任务 如下图所示,在AT89S51单片机的P0和P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个 ...

  9. 51单片机数码管显示60秒倒计时(C语言)

    51单片机数码管显示60秒倒计时(C语言) 基于普中51单片机开发板,运用定时器/计数器0和1,实现60秒的倒计时和LED灯0.5s间隔闪烁 文章目录 51单片机数码管显示60秒倒计时(C语言) 前言 ...

最新文章

  1. 第五周项目四-长方柱形(1)
  2. tc-auth-lib学习笔记
  3. 《Android游戏开发详解》一2.16 区分类和对象
  4. boost::mp11::tuple_for_each相关用法的测试程序
  5. edge浏览器如何把网页放到桌面_电脑如何添加便签,便签怎么放到桌面上
  6. 史上速度最快!DNS 公共服务 1.1.1.1 正式发布
  7. 第十章:基本数据结构(2)
  8. Android手机中第三方签名应用程序无法获得的permission
  9. matlab计算abc三相短路电流_变频电源的安装及单相/三相变频电源电流计算公
  10. 21世纪最牛逼思想家的心路历程小结———哲学、宿命论
  11. 解决The kernel appears to have died. It will restart automatically问题
  12. 计算机毕业设计太难做不出来怎么办?
  13. 惠普103a打印机芯片清零_惠普M104a打印机的粉盒CF218A,芯片怎么取下来啊
  14. 【echarts地图制作】下钻到乡镇/街道级别的
  15. 运筹学 基础 知识点总结 (八)
  16. 【ACM- OJ】《Oulipo》C++
  17. Node.js 的安装(电脑win7支持的版本)
  18. 2022-05-14前端周报 巴厘岛项目交接完成
  19. 谷歌 Pixel 手机阻止用户拨打报警电话
  20. 计算机配件进口关税走势,计算机类产品关税降50% 从20%下调至10%

热门文章

  1. python locals动态获取变量名
  2. mysql课设体会500字_MYSQL数据库课程设计 精品
  3. Ruoyi实现单文件上传和多文件打包压缩包下载
  4. php生成zip压缩包、thinkphp压缩和打包下载实例
  5. samsung q1u android,7英寸LCD触摸屏 三星Q1U掌心中的笔记本
  6. 佩京科技 | 体感互动:弹跳消消乐
  7. 关于VG数据集的分析
  8. ISE约束--UCF编辑的入门介绍[zz]
  9. PHP中增删改应用“六脉神剑”
  10. 快卸载美图秀秀,它会收集并出售你的个人信息