51單片機仿真搖號抽獎機源程序 12864液晶顯示

資料下載地址:51單片機仿真搖號抽獎機源程序12864液晶顯示仿真+程序

一、功能介紹

單片機連接12864(st7920)液晶顯示器和1個按鍵接INT0,模擬一個抽獎機。
實現效果:
1、液晶初始顯示“祝你好運!”;
2、按一下按鍵,液晶顯示“開始抽獎”,然后顯示“3-2-1”倒計時后,產生20個(0-4之間的)隨機數;
3、液晶屏幕根據隨機數顯示“特等獎”、“1等獎”、“2等獎”、“3等獎”、“謝謝參與";
4、最后液晶屏顯示抽獎結果:“恭喜你獲得:XXX”。
5、再按一下按鍵,重新開始抽獎,液晶又顯示“開始抽獎”。。。。。。如此循環。

二、仿真圖片

三、程序

void delay(int ms)         // 毫秒延時函數
{while(ms--){uchar i;for(i=0;i<250;i++)  {_nop_();        //空操作,耗時1個指令周期,晶振12MHz時,耗時1us                  _nop_();_nop_();_nop_();}}
}               
/*******************************************************************/
/*檢查LCD忙狀態                                                    */
/*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數據。      */
/*******************************************************************/
bit lcd_busy()
{                          bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();         //延時4usresult = (bit)(P0&0x80);LCD_EN = 0;return(result);
}
/*******************************************************************/
/*寫指令數據到LCD                                                  */
/*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。                             */
/*******************************************************************/
void lcd_wcmd(uchar cmd)
{                          while(lcd_busy());LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;  
}
/*******************************************************************/
/*寫顯示數據到LCD                                                  */
/*RS=H,RW=L,E=高脈沖,D0-D7=數據。                               */
/*******************************************************************/
void lcd_wdat(uchar dat)
{                          while(lcd_busy());LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;
}
//寫字符串
void lcd_wstr(uchar* dat)
{   uchar i=0;                     while(dat[i] != '\0'&&i<16){                         //顯示字符lcd_wdat(dat[i]);i++;}
}
/*******************************************************************/
/*  LCD初始化設定                                                  */
/*******************************************************************/
void lcd_init()
{LCD_PSB = 1;         //并口方式//  lcd_wcmd(0x34);      //擴充指令操作
//  delay(5);lcd_wcmd(0x30);      //基本指令操作delay(5);lcd_wcmd(0x0C);      //顯示開,關光標delay(5);lcd_wcmd(0x01);      //清除LCD的顯示內容delay(5);
}
/*********************************************************/
/* 設定顯示位置                                          */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{                          uchar  pos;if (X==0){X=0x80;}else if (X==1){X=0x90;}else if (X==2){X=0x88;}else if (X==3){X=0x98;}pos = X+Y ;  lcd_wcmd(pos);     //顯示地址
}
//中斷初始化
void interrupt_init()
{EA=1;/*開全局中斷*/EX0=1;/*允許INT0中斷*/IT0=1;/*設置外部中斷觸發方式:下降沿觸發*/TMOD=0x11;ET0=1;ET1=1;TR0=0;TR1=0;TH0=15535/256; //計時50msTL0=15535%256;TH1=55535/256; //計時10msTL1=55535%256;       
}
/*********************************************************/
/* 主程序                                                                                    */
/*********************************************************/
void  main()
{       uchar str[17]="        ";interrupt_init();delay(10);                 //延時lcd_init();                //初始化LCD            lcd_pos(1,4-strlen(dis[0])/4);            //設置顯示位置為第二行的第1個字符lcd_wstr(dis[0]);      //顯示字符while(1){delay(50);if(t_flag==1){t_flag=0;lcd_pos(2,0);lcd_wstr(str);      delay(5);lcd_pos(2,4-strlen(time[num])/4);lcd_wstr(time[num]);}else if(a_flag==1){a_flag=0;lcd_wcmd(0x01);lcd_pos(2,4-strlen(award[num])/4);lcd_wstr(award[num]);if(end_flag==1){end_flag=0;lcd_pos(0,4-strlen(dis[2])/4);lcd_wstr(dis[2]);}}delay(10);}
}
void EX_IT0() interrupt 0
{lcd_wcmd(0x01);lcd_pos(1,4-strlen(dis[1])/4);            //設置顯示位置為第二行的第1個字符lcd_wstr(dis[1]);      //顯示字符TH0=15535/256; //計時50msTL0=15535%256;TR0=1;num=2;       
}
void ET_IT0() interrupt 1
{TH0=15535/256; //計時50msTL0=15535%256;                                                                                                       t++;if(t%20==0){t_flag=1;num=(num+1)%3;if(t==60)

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

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

相關文章

如何在 Ubuntu 22.04 上安裝 Graylog 開源日志管理平臺

簡介 Graylog 的開源特性、豐富的功能、靈活性和可擴展性使其成為一個流行的日志管理平臺。在本教程中&#xff0c;我將向你展示如何在 Ubuntu 22.04 上安裝 Graylog&#xff0c;包括配置 Graylog 服務器軟件包和訪問 Graylog Web UI。 Graylog 是什么&#xff1f; Graylog …

技術發展歷程:從 CORBA 到微服務

CORBA CORBA&#xff08;Common Object Request Broker Architecture&#xff09;誕生于上世紀 90 年代初期&#xff0c;由 OMG 組織提出&#xff0c;它作為一種開創性的分布式對象技術規范&#xff0c;在當時的計算機領域引起了轟動。其核心構成部分——接口定義語言&#xf…

搶單人機交互「新紅利」!哪些細分賽道“多金”?

受終端用戶的智能座艙體驗需求驅動&#xff0c;視覺、聽覺、觸覺等人機交互方式加速煥新。 一方面&#xff0c;人機多模交互引領&#xff0c;車載聲學進入新周期。根據高工智能汽車研究院統計數據&#xff0c;單車的車載揚聲器搭載量正在快速起量。 很顯然&#xff0c;作為智…

記錄vue+elementUI table的組件

可展示圖片&#xff0c; 可使用slot插槽添加邏輯&#xff0c; 循環表cloumn&#xff0c; 循環添加操作配置actionButtons <el-tablev-loading"loading":data"tableData"borderstyle"width: 100%"selection-change"selectChange"…

圖像配準有哪些技術?

目錄 圖像配準技術 1.基于特征的圖像配準 2.基于強度的圖像配準 3.基于模型的圖像配準 4.基于學習的圖像配準 5.混合方法 圖像配準的應用 圖像配準技術入門 常見問題解答 圖像配準是計算機視覺和醫學成像中的一項關鍵技術&#xff0c;用于將多幅圖像對齊到一個共同的坐…

前端學習DAY26(華為平板頁面)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>平板圖片</title><style> .box{text-al…

算法 雙指針技巧

文章目錄 雙指針[leetcode167 兩數之和](https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/description/)分析題解 [leetcode88 合并兩個有序數組](https://leetcode.cn/problems/merge-sorted-array/description/)分析題解 [leetcode142 環形鏈表](https://lee…

DevOps工程技術價值流:制品庫Nexus與Harbor的實戰探索

制品庫作為DevOps價值流中的一個關鍵環節&#xff0c;其重要性日益凸顯。制品庫&#xff0c;作為存儲和管理軟件開發過程中產生的各種制品&#xff08;如代碼包、鏡像、配置文件等&#xff09;的倉庫&#xff0c;是連接開發、測試、部署等多個環節的橋梁。它不僅能夠實現制品的…

R9000P鍵盤失靈解決辦法

問題描述 突然&#xff0c;就是很突然&#xff0c;我買的R9000P 2024不到三個月&#xff0c;鍵盤突然都不能用了&#xff0c;是所有鍵盤按鍵都無效的那種。&#xff08;可以使用外接鍵盤&#xff09; 解決辦法 我本科室友說的好哈&#xff0c;全壞全沒壞。 &#xff08;該解…

潛在狄利克雷分配LDA 算法深度解析

引言 潛在狄利克雷分配&#xff08;Latent Dirichlet Allocation, LDA&#xff09;是一種廣泛應用于文本挖掘和信息檢索領域的主題模型。它能夠從文檔集合中自動發現隱藏的主題結構&#xff0c;為理解大規模文本數據提供了強有力的工具。本文將著重講解 LDA 的核心理論&#x…

使用正則表達式提取PDF文件頁數的實現方案

文章目錄 背景介紹實現原理代碼實現1. 基礎函數結構2. 頁數提取邏輯3. 使用示例 正則表達式解析優點與局限性優點局限性 錯誤處理建議性能優化建議最佳實踐建議總結參考資源 背景介紹 在Web應用開發中,我們經常需要獲取上傳PDF文件的頁數信息。雖然可以使用pdf.js等第三方庫,但…

sentinel學習筆記6-限流降級(上)

本文屬于sentinel學習筆記系列。網上看到吳就業老師的專欄&#xff0c;寫的好值得推薦&#xff0c;我整理的有所刪減&#xff0c;推薦看原文。 https://blog.csdn.net/baidu_28523317/category_10400605.html sentinel 實現限流降級、熔斷降級、黑白名單限流降級、系統自適應…

全面解析 Kubernetes 流量負載均衡:iptables 與 IPVS 模式

目錄 Kubernetes 中 Service 的流量負載均衡模式 1. iptables 模式 工作原理 數據路徑 優點 缺點 適用場景 2. IPVS 模式 工作原理 數據路徑 優點 缺點 適用場景 兩種模式的對比 如何切換模式 啟用 IPVS 模式 驗證模式 總結 Kubernetes 中 Service 的流量負載…

每日十題八股-2024年12月19日

1.Bean注入和xml注入最終得到了相同的效果&#xff0c;它們在底層是怎樣做的&#xff1f; 2.Spring給我們提供了很多擴展點&#xff0c;這些有了解嗎&#xff1f; 3.MVC分層介紹一下&#xff1f; 4.了解SpringMVC的處理流程嗎&#xff1f; 5.Handlermapping 和 handleradapter有…

藍橋杯嵌入式備賽教程(1、led,2、lcd,3、key)

一、工程模版創建流程 第一步 創建新項目 第二步 選擇型號和管腳封裝 第三步 RCC使能 外部時鐘&#xff0c;高速外部時鐘 第四步晶振時鐘配置 由數據手冊7.1可知外部晶振頻率為24MHz 最后一項設置為80 按下回車他會自動配置時鐘 第五步&#xff0c;如果不勾選可能程序只會…

詳細解讀sedex驗廠

SEDEX驗廠&#xff0c;即供貨商商業道德信息交流認證&#xff08;Supplier Ethical Data Exchange&#xff09;&#xff0c;是一種表明企業遵守商業道德的認證。以下是對SEDEX驗廠的詳細解讀&#xff1a; 一、SEDEX驗廠概述 SEDEX是一家總部位于英國倫敦的非營利組織&#xf…

2.4 設備管理

文章目錄 設備管理概述設備管理技術磁盤調度 設備管理概述 設備管理是操作系統中最繁雜、與硬件關系緊密的部分。 設備可以按照數據組織、資源分配、數據傳輸率分類。 數據組織&#xff1a;分為塊設備&#xff08;ex. 磁盤&#xff09;、字符設備(ex. 打印機)。資源分配&#…

網絡安全滲透有什么常見的漏洞嗎?

弱口令與密碼安全問題 THINKMO 01 暴力破解登錄&#xff08;Weak Password Attack&#xff09; 在某次滲透測試中&#xff0c;測試人員發現一個網站的后臺管理系統使用了非常簡單的密碼 admin123&#xff0c;而且用戶名也是常見的 admin。那么攻擊者就可以通過暴力破解工具&…

PSDK的編譯與ROS包封裝

本文檔講述在NIVIDIA開發板上使用大疆提供的Payload SDK獲取無人機實時GPS信息的方法&#xff0c;以及基于Payload SDK發布ROS GPS話題信息的方法。 文章目錄 0 實現目標1 Payload SDK1.1 PSDK 源碼的編譯1.2 PSDK 的使用 2 遙測數據的讀取2.1 示例代碼結構2.2 讀取機載GPS信息…

模型 課題分離

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思維模型目錄。明確自我與他人責任。 1 課題分離的應用 1.1課題分離在心理治療中的應用案例&#xff1a;李曉的故事 李曉&#xff0c;一位28歲的軟件工程師&#xff0c;在北京打拼。他面臨著工作、家庭和感情的多重…