基于 51 單片機做的二十四點小游戲

用 51 單片機做的二十四點小游戲

一、任務要求

設計一個模擬紙牌 24 點玩法的單片機模擬器,由單片機隨機發出四個牌點,測試者在實驗板按鍵上輸入計算過程,單片機判斷計算結果是否正確,并評定測試者的成績。

【基本要求】:

1.測試多組數據

2.單片機在數碼管上隨機給出 4 張牌點,牌點范圍為 1-13,10 到 13 由字符 a,b,c,d 表示

3.在單片機實驗板按鍵中設計 4 個數學運算鍵 +-×÷

4.4 個數字中每使用完一個后該字符應有明顯標識

5.只允許測試者使用四則運算(可加括號)

6.無論測試結果是否正確,均有聲光效果提示;

7.測試完畢,由單片機給出測試者的最終成績

二、功能特點與使用說明

功能特點:

1.使用最低的系統時鐘頻率,降低功耗

2.鍵盤掃描使用了軟件消抖,防止按鍵被重復判別為彈起或按下

3.鍵值判斷使用的是鍵值跳變判斷,即使你一直將鍵盤按下,也不會重復執行命令

4.使用后綴表達式計算字符串算式,代碼簡潔易懂

使用說明

各鍵盤功能如表所示:

三、方案設計

1.資源分配:

(1)使用外部晶振 22.1184MHz,使用二分頻作為系統時鐘;

(2)定時器 T2:

開啟中斷,系統時鐘 12 分頻,16 位自動重裝模式;

初始值和自動重裝值均為 FB80,計算(65536-0xFB80)(12/11059200)=0.00125s=1.25ms,即中斷 1.25ms 發生一次;該定時器用來產生 1.25ms 定時,用來掃描鍵盤,判斷其是否被按下,掃描按鍵,完成一次輪詢掃描時間為 51.25ms=6.25ms

(3)定時器 T4:

開啟中斷,系統時鐘 12 分頻,16 位自動重裝模式;

初始值和自動重裝值均為 FB80,計算(65536-0xFB80)*(12/11059200)=0.00125s=1.25ms,即中斷 1.25ms 發生一次;該定時器用來產生 1.25ms 定時,用來掃描鍵值,并執行相應的鍵盤操作

(4)使用了比較多的全局變量,將不需要修改的常量數據存入外部 RAM 中

2.設計思路:

鍵盤設計思路:首先通過 T2 掃描鍵盤,判斷鍵盤是否被按下,這里運用了軟件消抖的方法,連續檢測到四次鍵盤被按下(或松開)才會把鍵值數組里相應的地方置為 1(0)。然后通過 T4 掃描鍵值數組,如果檢測到跳變(防止一直按著某個鍵,其鍵值一直為 1,導致其功能一直被反復執行),且跳變后鍵值為 1,則執行此鍵位的命令。

LCD 屏設計思路:通過字模軟件生成數字字母及運算符號的 32 位字模數組,通過選擇左右屏以及生成的 X,Y 坐標可以將數字顯示在自己想要的地方主程序設計思路:隨機生成四個數并將其存在一個數組之中,然后顯示在屏幕的上方。按鍵選擇數或符號,每選擇了一個數,就會將其原數所在的區域清除,表示此數以及被選擇了,然后將此數或此符號用字符的形式存在一個字符數組里面,最后按下等于鍵,就會運行計算此字符數組對應的表達式的值的程序,最后結果算出來如果等于 24,則會亮起黃燈,如果錯誤則會亮綠燈。

計算字符串表達式的設計思路:

1.中綴表達式轉換為后綴表達式:a).數字直接入隊列 b).運算符要與棧頂元素比較

① 棧為空直接入棧

② 運算符優先級大于棧頂元素優先級則直接入棧

③ 小于或等于則出棧入列,再與棧頂元素進行比較,直到運算符優先級小于棧頂元

素優先級后,操作符再入棧 c).操作符是(則無條件入棧

d).操作符為),則依次出棧入列,直到匹配到第一個(為止,此操作符直接舍棄,(直接出棧舍棄

2.通過逆波蘭表達式計算結果:獲取字符串表達式的每一項,判斷這一項是數據還是操作符,如果是數據,則讓它入棧,如果是操作符,讓數據出棧,和操作符進行運算

四、流程圖

1.主程序 intmain()

2.按鍵檢測子程序 voidKeyboardDriver()

3.按鍵掃描子程序 voidKeyscan(unsignedcharscannum)

4.中綴表達式轉后綴表達式子程序

5.隨機數生成子程序 voidset_24()

六、程序測試方法與結果

再按一次生成四個隨機數

多次按下可見四個數完全隨機

測試按鍵,選擇第一個數

可見第一個數被挪下,且原位置數消失接著測試 +-*/<>

可見功能正常

接著測試計算,首先測試算出來的數不是 24

可見 D2(綠燈)亮起,說明計算錯誤

接著測試計算,測試算出來的數是 24

可見經過多重括號計算出的值為 24,D1(黃燈亮),說明整個程序是完整可行符合要求的

七、心得與體會

在本次專題實驗中我再次深刻體會到單片機是將軟件與硬件緊密結合的,軟件的編程無法脫離實際的硬件電路而存在,軟件的編程是為硬件服務的,硬件工程師需要根據實際實際電路編寫程序,而不是純軟件編程。有時候軟件上編寫正確,硬件上不一定可以實現所想的功能,操縱硬件,是單片機課程的魅力所在。

同時,通過這次專題實驗,我強化了我的編程能力,思維,學到了一些編程上的技巧,也學會如何管理自己的代碼等。

本次實驗中我遇到的最大困難是全局變量和函數內靜態變量的使用,不能濫用全局變量和靜態變量,對于小容量的單片機來說,內存資源很寶貴,如果占用太多空間,內存不足會導致程序運行異常,我也在這個問題上卡了很久,以后會更加注意單片機內存的利用。

另外本次實驗還鍛煉了我的動手能力,滿足我動手實踐的需求,讓我這段時間過得相當充實,謝謝老師給我這次機會。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913027.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913027.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913027.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hadoop WordCount 程序實現與執行指南

Hadoop WordCount 程序實現與執行指南 下面是使用Python實現的Hadoop WordCount程序,包含完整的Mapper和Reducer部分。 這個程序可以在PyCharm中本地測試,也可以部署到遠程Hadoop集群上運行。 mapper.py import sys# 從標準輸入讀取數據 for line in sys.stdin:# 移除行首…

數據可視化:5 分鐘讀懂其核心價值與技術實踐

為什么數據可視化成為企業數字化轉型的“必修課”&#xff1f;在信息爆炸的時代&#xff0c;企業每天產生海量數據&#xff0c;從客戶行為到銷售業績&#xff0c;從供應鏈運作到市場趨勢。如何從這些原始數據中快速提煉有價值的信息&#xff1f;如何將復雜數據轉化為直觀易懂的…

Python 量化交易安裝使用教程

一、什么是量化交易&#xff1f; 量化交易是通過數學模型和計算機程序&#xff0c;自動化地執行證券買賣決策的交易方式。Python 憑借其豐富的生態和強大的數據處理能力&#xff0c;成為量化交易的首選語言。 二、環境準備 建議使用 Anaconda 安裝 Python 3.8&#xff0c;方便…

從 PostgreSQL 到 DolphinDB:數據實時同步一站式解決方案

隨著越來越多的用戶使用 DolphinDB&#xff0c;各種不同的應用的場景也對 DolphinDB 的數據接入提出了不同的要求。部分用戶需要將 PostgreSQL 的數據實時同步到 DolphinDB 中來&#xff0c;以滿足在 DolphinDB 中使用數據的實時性需求。本篇教程將介紹使用 Debezium 來實時捕獲…

關于聯詠(Novatek )白平衡色溫坐標系探究

目錄 一、疑問 二、結論 三、分析 四、釋疑 五、仿真模擬 一、疑問 為什么Novatek的白平衡色溫坐標系是這個樣子的呢?各條直線和曲線分別代表什么含義呢?色溫坐標系中所標定的參數代表什么含義呢?如何標定新增一些特殊的光源呢?二、結論

Protein FID:AI蛋白質結構生成模型評估新指標

一、引言&#xff1a;蛋白質生成模型面臨的評估挑戰 近年來&#xff0c;AI驅動的蛋白質結構生成模型取得了令人矚目的進展&#xff0c;但如何有效評估這些模型的質量卻一直是一個懸而未決的問題。雖然實驗驗證仍然是金標準&#xff0c;但計算機模擬評估對于快速開發和比較機器…

Vim 高效編輯指南:從基礎操作到塊編輯的進階之路

文章目錄?? 一、基礎編輯命令(生存必備)? 二、進階操作:可視化塊模式 (Ctrl+v)典型應用場景?? 三、效率提升技巧?? 四、配置建議(~/.vimrc)結語作為開發者最強大的文本編輯器之一,Vim 的高效操作離不開其命令模式(Normal Mode)。本文將系統性地介紹 Vim 的核心編…

docker學習第一天框架學習以及在redhat7.9安裝操作

一.docker是什么。 Docker 是一個開源的容器化平臺&#xff0c;通過將應用程序及其依賴項&#xff08;如代碼、運行時環境、系統工具等&#xff09;打包到輕量級、可移植的容器中&#xff0c;實現「一次構建&#xff0c;處處運行」的現代化開發模式。它利用了 Linux 內核特性來…

QT控件 使用Font Awesome開源圖標庫修改QWidget和QML兩種界面框架的控件圖標

又一個月快要結束了&#xff0c;在這里總結下分別在QWidget和QML兩種界面設計模式中應用Font Awesome開源圖標庫&#xff0c;修改界面的顯示圖標效果&#xff0c; AriaNg是aria2的可視化web界面工具,其中的圖標大都是Font AWesome中的字體圖標&#xff0c;某位曾經嘗試將AriaNg…

Qt Quick 與 QML(四)qml中的Delegate系列委托組件

一、概念 在QML中&#xff0c;Delegate是一種非常重要的組件&#xff0c;特別是在使用ListView、GridView、PathView等視圖組件時。Delegate用于定義每個列表或網格中的項目是如何展示的。通過自定義Delegate&#xff0c;你可以控制每個項目的外觀和行為。 Delegate通常是一個…

android圖片優化

在 Android 中加載大圖時&#xff0c;如果不進行優化處理&#xff0c;很容易導致內存溢出&#xff08;OOM&#xff09;和應用卡頓。以下是幾種高效處理大圖加載的方法和最佳實踐&#xff1a; 1. 使用圖片加載庫&#xff08;推薦&#xff09; 成熟的第三方庫已經處理了內存管理…

【機器人】復現 DOV-SG 機器人導航 | 動態開放詞匯 | 3D 場景圖

DOV-SG 建了動態 3D 場景圖&#xff0c;并使用LLM大型語言模型進行任務分解&#xff0c;從而能夠在交互式探索過程中對 3D 場景圖進行局部更新。 來自RA-L 2025&#xff0c;適合長時間的 語言引導移動操作&#xff0c;動態開放詞匯 3D 場景圖。 論文地址&#xff1a;Dynamic …

mongodb 中dbs 時,local代表的是什么

在 MongoDB 中&#xff0c;local 是一個內置的系統數據庫&#xff0c;用于存儲當前 MongoDB 實例&#xff08;或副本集節點&#xff09;的元數據和內部數據&#xff0c;與其他數據庫不同&#xff0c;local 數據庫的數據不會被復制到副本集的其他成員。 local 數據庫的核心作用 …

Spring Cloud(微服務部署與監控)

&#x1f4cc; 摘要 在微服務架構中&#xff0c;隨著服務數量的增長和部署復雜度的提升&#xff0c;如何高效部署、持續監控、快速定位問題并實現自動化運維成為保障系統穩定性的關鍵。 本文將圍繞 Spring Cloud 微服務的部署與監控 展開&#xff0c;深入講解&#xff1a; 微…

音頻動態壓縮算法曲線實現

Juce實現動態壓縮曲線繪制 動態范圍壓縮算法&#xff08;Dynamic Range Compression&#xff0c;DRC&#xff09;是將音頻信號的動態范圍映射到一個較小的范圍內的過程&#xff0c;即降低較高的峰值的信號電平&#xff0c;而不處理較安靜的部分。DRC被廣泛用于音頻錄制、制作工…

技術視界 | OpenLoong 控制框架:打造通用人形機器人智能系統的中樞基座

在人形機器人向通用性、智能化方向加速演進的當下&#xff0c;控制系統的角色正在發生根本變化&#xff1a;它不再只是底層驅動的接口適配層&#xff0c;也不只是策略調用的轉譯引擎&#xff0c;而是成為連接具身模型、異構本體與多樣化任務的“中樞神經系統”。 在 2025 年張…

IOS 藍牙連接

最近做一個硬件設備&#xff0c;寫IOS相應的數據連接/分析代碼時&#xff1b;發現一個問題&#xff0c;如果是開機&#xff0c;每次都能連接上。連接斷開后&#xff0c;發現再也掃描不到了。通過第三方工具LightBlue&#xff0c;發現信號是-127。 此時進入設置查看藍牙設備&am…

【硬核數學 · LLM篇】3.1 Transformer之心:自注意力機制的線性代數解構《從零構建機器學習、深度學習到LLM的數學認知》

我們已經完成了對機器學習和深度學習核心數學理論的全面探索。我們從第一階段的經典機器學習理論&#xff0c;走到了第二階段的深度學習“黑盒”內部&#xff0c;用線性代數、微積分、概率論、優化理論等一系列數學工具&#xff0c;將神經網絡的每一個部件都拆解得淋漓盡致。 …

flutter封裝vlcplayer的控制器

import dart:async;import package:flutter_vlc_player/flutter_vlc_player.dart; import package:flutter/material.dart;class GlobalVlcController extends ChangeNotifier {//設置單例/*static final GlobalVlcController _instance GlobalVlcController._internal();fact…

SEO-濫用元機器人、規范或 hreflang 標簽

&#x1f9f1; 一、濫用 Meta Robots 標簽 ? 常見問題&#xff1a; 問題描述設置了 noindex 不該屏蔽的頁面比如產品頁、分類頁被意外 noindex&#xff0c;導致不被收錄設置 nofollow 導致內鏈失效所有鏈接都被 nofollow&#xff0c;影響爬蟲抓取路徑在 <meta> 標簽和…