IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【51单片机】STC_B开发板项目《猜猜我是几》 -> 正文阅读

[嵌入式]【51单片机】STC_B开发板项目《猜猜我是几》

这是《电子系统设计与创新基础训练》的课程设计,做了一个互动小游戏,学名“数字炸弹”。在这里记录一下实现的过程。

Github链接:https://github.com/Red-Pitaya/Guess-Please/

一、 实现要求

  • STC_B学习板×2
  • 杜邦线×2
  • Keil软件

二、 总体方案设计

利用现有的STC_B学习板设备,结合数码管滚动显示功能,非易失存储器功能,导航按键功能和蜂鸣器功能,电子音乐功能,485通信功能,将猜测数字大小并给出反馈结果与猜测次数显示在数码管上,实现双人猜测数字小游戏功能。发送方负责给出正确数字(0~99),并存入非易失存储器中,并在收到猜测的数字后发送反馈结果。猜测方负责猜测数字并发给发送方。通过导航键上下左右可以调整数字每一位的大小。

三、 实验过程

利用杜邦线连接好两块板子,两人通过485通信进行数据交互,实现实时猜测游戏。游戏最多猜测次数为7次,当已猜过七次未猜中或猜中,会自动结束游戏,分类显示滚动字样“SUCCESS”或“FAIL”。

  • 数码管布局:
    发送方:第一二位数码管显示正确数字的大小(0~99),按下K3按键后(进行正确数字存储)第五位数码管显示当前猜测次数,第八位数码管显示大小(0为小,1为大,2为相等)。’
    在这里插入图片描述
    猜测方:第一二位数码管显示猜测数字的大小(0~99),第八位数码管显示收到的大小(0为小,1为大,2为相等)。
    在这里插入图片描述

  • 游戏初始化:
    复位后显示滚动字样“GUESS PLEASE”,向里按下导航按键后数码管显示数字,开始游戏。(发送方猜测方一致)
    在这里插入图片描述

  • 游戏中:
    发送方:通过控制导航键上下左右调整正确数字的大小,确认后按下K3进行存储,同时第五,八位数码管都显示0。游戏中可通过按下K2对正确数字进行查询。当收到猜测方猜测的数字后,一两位数码管显示猜测的数字,可通过向里按导航按键进行第八位的调整,0为小,1为大,2为正确。调整完毕后按下K1发送(同时蜂鸣器发声)。每次发送接收一轮回后猜测次数加一(即第五位数码管)
    在这里插入图片描述

猜测方:通过控制导航键上下左右调整猜测数字的大小,确认后按下K1发送(同时蜂鸣器发声)。当收到发送方的大小反馈时(第八位显示)为0或1则可继续调整发送(为0会发出降调的音乐,为1发出升调的音乐)。
在这里插入图片描述

  • 游戏结束:
    当发送方发送数字为2(猜测方接收到2)后,数码管滚动显示“SUCCESS”,并于七秒后自动显示“SCORE <7-猜测次数>”。游戏胜利,结束。
    在这里插入图片描述
    在这里插入图片描述

当猜测次数大于七次后,数码管持续滚动显示“FAIL”。游戏失败,结束。
在这里插入图片描述

四、 硬件原理

硬件原理基本上都是在《STC_B学习板原理图》与《STC15F2K60S2数据手册》里学习的。

数码管显示:由于全程没有用LED灯,所以P0口设为推挽模式,P2.3设为0。利用定时器0中断进行显示。将初始值TH0=(65535-1000)/256,TL0=(65535-1000)%256,即每隔1ms就会溢出,进而进入中断函数,所以每隔1ms会运行中断函数里的程序。
在这里插入图片描述

普通按键:主要设计硬件的功能为消抖。由于按下按键后电平的转换大致为:
在这里插入图片描述

因此用延时将按下后至稳定之间的抖动与抬起时的抖动用5ms的延时消除。
非易失性存储器:利用时钟线SDA与数据线SCL的高低电平转换,编写I2C开始和结束信号,应答信号,位传输信号。编写逻辑大致如下图:
在这里插入图片描述

(此为写一个字节时序,其余皆可从《非易失存储器24C01、24C02、24C04、24C08、24C16数据手册》中查询)

RS485通信:使用RXD线接收数据,用TXD发送数据。对应发送、接收数据完成(S2RI、S2TI硬件置1)触发串口中断Uart2_Routine(设置的串口2),并把管脚切换为P4.6,P4.7。所有数据通过S2BUF传输。串口初始化为S2CON = 0x10即串口2接收,AUXR |= 0x14即1T模式并启动定时器2。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

普通按键:主要为按键1引脚对应触发外部中断0,通过设定寄存器设置按键1上升沿触发外部中断,当按键1被按下时启动数据发送。由于是使用按键中断实现数据发送的,因此串口中断的优先级高于按键中断。即IP2 |= 0x01。

导航按键:ADC口对来自导航按键不同方向的电压值进行采集,导航按键的每一个方向被按下,都会引起实际电压的改变,与A/D转换器配合,可以获得按下后A/D转换的值。将ADRJ设为0,则ADC_RES存放高八位,ADC_RESL存放低两位。ADC_CONTR = 0x8F,CLK_DIV = 0X00。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

蜂鸣器:无源蜂鸣器只需改变Beep端口的电平,产生一个周期性的方波即可使蜂鸣器发生声音,不同的频率发出的声音不同。
电子音乐:每一个音符的发声频率是不同的,可以用计时器来精确计时,用以产生方波,这样就能发出不用的音符声音。利用定时器1中断即可以使蜂鸣器端口翻转,即发声。
在这里插入图片描述

五、 软件设计与实现

数码管显示:借鉴八位数码管滚动显示案例,在定时器T0中断函数中,将位选每隔1ms加一,从而形成循环显示的数字。
在这里插入图片描述
分别分为displayScore()(显示分数),displayStart()(显示开始界面),displayEnd()(显示结束界面),displayFail()(显示失败界面)

非易失性存储器:利用写成的I2C开始和结束信号,应答信号,位传输信号,直接调用编写发送字节与接收字节函数。并在导航按键的K3中调用发送字节函数,即存储;K2的延时消抖程序中调用接收字节函数,即读取。
在这里插入图片描述
比如对于开始函数来说,就是SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。即为:
在这里插入图片描述
其余函数同理。

RS485通信:在串口中断中将S2RI与S2TI软件置0,由于S2CON不可位寻址,所以S2RI与S2TI不能像SI与RI一样直接软件置0,需要用位与或来置0。外部中断0中利用S2BUF将数据进行存储使用。
在这里插入图片描述
在这里插入图片描述
导航按键:分别判断转换后的电压值,用if-else函数区分各个方向,实现加、减、位选的移位,并把更改的数据直接赋给数码管显示参数。
在这里插入图片描述

蜂鸣器与电子音乐:在K1的按键消抖中添加蜂鸣器发声函数,即可以减少按键电平的不稳定带来的多次发声。
在这里插入图片描述
另外,所有程序的进行状态判断,都新建了标志参数来判断。比如isSend用于判断是否在发送数据;GetFlag用来判断是否已经开始接收猜测数字;guessflag用于判断是否开始猜测,进而显示完整面板;Start用于判断游戏是否开始,显示初始化滚动界面;End用于判断游戏是否结束,显示结束滚动界面并进一步判断是否胜利;ScoreFlag用于胜利时的分数显示界面。

六、 设计总结与心得

  1. 设计总结
    基本实现所有所想功能。
    完成后有点遗憾的就是这个设计没有比较创新的点,作用也只能是儿童益智数字小游戏。不过在学习的过程中,对单片机功能有了很多的了解,所以在之后的使用中,也可以更好更完善的进行创新思考。
    设计过程中遇到了很多问题,比如不了解ADC的初始化与K3的按键端口重合,在写非易失存储器时一直以为是非易失的问题,查漏补缺了很久才解决;又比如猜测次数计数参数一直写到的是串口中断里,会产生很多的抖动,之后才灵光一闪想到写到K1下降沿导致的外部中断的K1消抖里;再比如蜂鸣器写到串口中断中发不了声,也是之后才考虑把它也写到K1消抖里。这些问题现在看起来微不足道,但在当时还是困扰了很久很久,一度甚至想通过简单的方法来避免这类问题。所以解决时也感受到了极大的愉悦,并且也可以进一步的促使我添加更多的功能并完善部分内容。
    同时在实验中也发现了自己前两周所学知识的不够深刻,在后两周也进行了查漏补缺。 在发现自己功能的创新性不足后,我也明白了只有把所学理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
  2. 设计心得
    这次课程设计实验对我来说意义重大。不仅是因为独立完成了设计任务,也是第一次学会利用数据手册等专业性材料进行查阅理解,并运用进行编写实现。这样就有一种步入专业领域,不是还在知识海洋外围浅尝辄止的感觉了。查阅资料并做完所有预设想法的感觉很开心很满足。

七、 参考资料

https://mooc1.chaoxing.com/course/203998550.html(电子系统设计与创新基础训练课程平台)
https://xiaopengzhen.blog.csdn.net/article/details/115755156(51单片机外部中断)
https://blog.csdn.net/lee_xuwei/article/details/83380281(上电串口发送0x00)
https://blog.csdn.net/asukaztc/article/details/78502201(推挽输出)

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:20:30  更:2021-09-18 10:21:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:21:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码