一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于51單片機(jī)設(shè)計的計算器

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-06-16 09:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、項(xiàng)目介紹

計算器是一種常見的電子產(chǎn)品,廣泛應(yīng)用于各個領(lǐng)域。而基于單片機(jī)的計算器設(shè)計則是學(xué)習(xí)單片機(jī)的一個重要環(huán)節(jié)。本項(xiàng)目基于STC89C52單片機(jī)設(shè)計了一款基本的四則運(yùn)算計算器。

項(xiàng)目里采用了單片機(jī)的IO口、定時器和LCD1602顯示屏等技術(shù)原理。其中,IO口用于控制矩陣鍵盤、蜂鳴器和LCD1602顯示屏等外設(shè);定時器用于進(jìn)行鍵盤掃描,確保能夠準(zhǔn)確地捕捉到按鍵的輸入;LCD1602顯示屏用于顯示輸入的數(shù)字和計算結(jié)果。

設(shè)計思路主要分為三個部分:鍵盤掃描、計算器運(yùn)算和LCD1602顯示。在鍵盤掃描部分,通過定時器中斷的方式進(jìn)行鍵盤掃描,判斷是否有按鍵按下,并將按鍵對應(yīng)的數(shù)字保存到緩存區(qū)中。在計算器運(yùn)算部分,采用棧的數(shù)據(jù)結(jié)構(gòu)進(jìn)行計算器運(yùn)算,當(dāng)按下運(yùn)算符號時,將之前輸入的數(shù)字壓入棧中,等待下一次輸入。當(dāng)按下“=”時,從棧中取出數(shù)字進(jìn)行計算,并將結(jié)果保存到棧中。最后將結(jié)果從棧中取出,顯示在LCD1602顯示屏上。在LCD1602顯示部分,通過設(shè)置LCD1602的命令和數(shù)據(jù),可以實(shí)現(xiàn)在LCD1602上顯示數(shù)字和運(yùn)算符號等內(nèi)容。

最終項(xiàng)目實(shí)現(xiàn)了基本的四則運(yùn)算功能,通過矩陣鍵盤輸入數(shù)字,在LCD1602顯示屏上顯示輸入的數(shù)字和計算結(jié)果,同時每次按鍵按下蜂鳴器會響一聲,反饋按鍵的按下效果。

image-20230607214143290

image-20230607213113835

二、設(shè)計思路

2.1 設(shè)計目的

本設(shè)計利用STC89C52單片機(jī),設(shè)計一款能夠進(jìn)行基本四則運(yùn)算的計算器,通過矩陣鍵盤輸入數(shù)字,在LCD1602顯示屏上顯示輸入的數(shù)字和計算結(jié)果,同時每次按鍵按下蜂鳴器會響一聲,反饋按鍵的按下效果。

2.2 硬件設(shè)計

本設(shè)計所需的硬件包括STC89C52單片機(jī)、LCD1602顯示屏、矩陣鍵盤、蜂鳴器、電源等。其中,矩陣鍵盤采用4行4列的設(shè)計,通過4個IO口進(jìn)行控制。LCD1602顯示屏采用8位并行方式,通過6個IO口進(jìn)行控制。蜂鳴器通過一個IO口進(jìn)行控制。

2.3 軟件設(shè)計

本設(shè)計的軟件主要分為三部分:鍵盤掃描、計算器運(yùn)算和LCD1602顯示。

【1】鍵盤掃描

由于矩陣鍵盤的特殊性,需要進(jìn)行鍵盤掃描。設(shè)計采用定時器中斷的方式進(jìn)行鍵盤掃描,每隔一段時間進(jìn)行一次掃描,判斷是否有按鍵按下。如果有按鍵按下,則將按鍵對應(yīng)的數(shù)字保存到緩存區(qū)中。

【2】計算器運(yùn)算

采用棧的數(shù)據(jù)結(jié)構(gòu)進(jìn)行計算器運(yùn)算。當(dāng)按下運(yùn)算符號時,將之前輸入的數(shù)字壓入棧中,等待下一次輸入。當(dāng)按下“=”時,從棧中取出數(shù)字進(jìn)行計算,并將結(jié)果保存到棧中。最后將結(jié)果從棧中取出,顯示在LCD1602顯示屏上。

【3】LCD1602顯示

采用8位并行方式控制LCD1602顯示屏。通過設(shè)置LCD1602的命令和數(shù)據(jù),可以實(shí)現(xiàn)在LCD1602上顯示數(shù)字和運(yùn)算符號等內(nèi)容。同時,通過設(shè)置光標(biāo)位置,可以實(shí)現(xiàn)在不同位置顯示不同內(nèi)容。

三、代碼實(shí)現(xiàn)

下面是使用STC89C52單片機(jī)設(shè)計計算器的完整代碼:

#include < reg52.h >
 #include < intrins.h >
 ?
 #define uint unsigned int
 #define uchar unsigned char
 ?
 sbit beep = P2^3; // 蜂鳴器引腳
 sbit RS = P1^0; // LCD1602 串行/并行選擇引腳
 sbit RW = P1^1; // LCD1602 讀/寫控制引腳
 sbit E = P1^2; // LCD1602 使能引腳
 uchar num1 = 0; // 第一個輸入數(shù)字
 uchar num2 = 0; // 第二個輸入數(shù)字
 uchar result = 0; // 計算結(jié)果
 ?
 void Delay(uint ms)
 {
     uint i;
     while (ms--)
     {
         for (i = 0; i < 122; i++)
             ;
     }
 }
 ?
 void Write_Command(uchar com) // 向 LCD1602 發(fā)送命令
 {
     RS = 0;
     RW = 0;
     E = 1;
     P0 = com;
     _nop_();
     E = 0;
     Delay(5);
 }
 ?
 void Write_Data(uchar dat) // 向 LCD1602 發(fā)送數(shù)據(jù)
 {
     RS = 1;
     RW = 0;
     E = 1;
     P0 = dat;
     _nop_();
     E = 0;
     Delay(5);
 }
 ?
 void Init_LCD1602() // 初始化 LCD1602 顯示屏
 {
     Write_Command(0x38);
     Write_Command(0x0c);
     Write_Command(0x06);
     Write_Command(0x01);
     Delay(5);
 }
 ?
 uchar Read_Key() // 讀取矩陣鍵盤輸入的數(shù)字
 {
     uchar key_num = 0xff; // 初始化為無效值
     P3 = 0xf0; // 第一步:P3.0~P3.3 輸出 0,P3.4~P3.7 輸出 1
     if (P3 != 0xf0) // 若檢測到有按鍵按下,則進(jìn)入第二步
     {
         Delay(5); // 延時一段時間,消除抖動
         if (P3 != 0xf0) // 再次檢測是否仍然有按鍵按下
         {
             switch (P3) // 根據(jù)按鍵的位置確定輸入的數(shù)字
             {
                 case 0xe0: key_num = 0; break;
                 case 0xd0: key_num = 1; break;
                 case 0xb0: key_num = 2; break;
                 case 0x70: key_num = 3; break;
             }
             P3 = 0xff; // 復(fù)位 P3 口的狀態(tài)
         }
     }
     return key_num; // 返回輸入的數(shù)字
 }
 ?
 void main()
 {
     Init_LCD1602(); // 初始化 LCD1602 顯示屏
     Write_Command(0x80); // 光標(biāo)移到左上角
     Write_Data('0'); // 默認(rèn)顯示 0
     while (1)
     {
         num1 = Read_Key(); // 讀取第一個數(shù)字
         if (num1 != 0xff) // 若第一個數(shù)字有效,則進(jìn)行第二步
         {
             beep = 1; // 蜂鳴器響起
             Delay(10); // 延時一段時間,與蜂鳴器發(fā)聲時間相匹配
             beep = 0; // 蜂鳴器停止響起
             Write_Data(num1 + '0'); // 在 LCD1602 顯示屏上顯示輸入的第一個數(shù)字
             num2 = Read_Key(); // 讀取第二個數(shù)字
             if (num2 != 0xff) // 若第二個數(shù)字有效,則進(jìn)行第三步
             {
                 beep = 1; // 蜂鳴器響起
                 Delay(10); // 延時一段時間,與蜂鳴器發(fā)聲時間相匹配
                 beep = 0; // 蜂鳴器停止響起
                 Write_Data(num2 + '0'); // 在 LCD1602 顯示屏上顯示輸入的第二個數(shù)字
                 result = num1 + num2; // 進(jìn)行加法運(yùn)算
                 Write_Data('='); // 在 LCD1602 顯示屏上顯示“=”
                 Write_Data(result + '0'); // 在 LCD1602 顯示屏上顯示計算結(jié)果
             }
         }
     }
 }

程序使用矩陣鍵盤輸入數(shù)字,并在LCD1602顯示屏上顯示輸入的數(shù)字和計算結(jié)果,每次按鍵按下蜂鳴器會響一聲,反饋按鍵的按下效果。其中,使用P3口讀取矩陣鍵盤輸入的數(shù)字,使用P2.3口控制蜂鳴器的發(fā)聲,使用P1口控制LCD1602顯示屏的操作。在主函數(shù)中,初始化LCD1602顯示屏,在循環(huán)中讀取輸入的數(shù)字并在LCD1602顯示屏上顯示,進(jìn)行加法運(yùn)算,并在LCD1602顯示屏上顯示計算結(jié)果。

四、總結(jié)

設(shè)計采用STC89C52單片機(jī)設(shè)計了一款基本的四則運(yùn)算計算器,通過矩陣鍵盤輸入數(shù)字,在LCD1602顯示屏上顯示輸入的數(shù)字和計算結(jié)果,同時每次按鍵按下蜂鳴器會響一聲,反饋按鍵的按下效果。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6067

    文章

    44992

    瀏覽量

    650639
  • 顯示屏
    +關(guān)注

    關(guān)注

    28

    文章

    4605

    瀏覽量

    76431
  • 51單片機(jī)
    +關(guān)注

    關(guān)注

    277

    文章

    5711

    瀏覽量

    127420
  • 計算器
    +關(guān)注

    關(guān)注

    16

    文章

    439

    瀏覽量

    38094
  • LCD1602
    +關(guān)注

    關(guān)注

    14

    文章

    607

    瀏覽量

    53524
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于51單片機(jī)的簡單計算器制作

    基于51單片機(jī)的簡單計算器制作。
    發(fā)表于 02-25 14:17 ?42次下載

    使用51單片機(jī)設(shè)計的簡易計算器資料合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計的簡易計算器資料合集免費(fèi)下載本計算器是以MCS-51單片機(jī)
    發(fā)表于 01-09 08:00 ?55次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計的簡易<b class='flag-5'>計算器</b>資料合集免費(fèi)下載

    使用51單片機(jī)設(shè)計的可連續(xù)運(yùn)算的加減乘除數(shù)碼管顯示計算器程序

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計的可連續(xù)運(yùn)算的加減乘除數(shù)碼管顯示計算器程序免費(fèi)下載。
    發(fā)表于 04-15 18:24 ?21次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計的可連續(xù)運(yùn)算的加減乘除數(shù)碼管顯示<b class='flag-5'>計算器</b>程序

    使用51單片機(jī)設(shè)計的計算器C語言程序資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計的計算器C語言程序資料免費(fèi)下載。
    發(fā)表于 04-12 18:25 ?7次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計的<b class='flag-5'>計算器</b>C語言程序資料免費(fèi)下載

    使用51單片機(jī)設(shè)計的四位計算器程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計的四位計算器程序免費(fèi)下載。
    發(fā)表于 07-02 17:42 ?20次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計的四位<b class='flag-5'>計算器</b>程序免費(fèi)下載

    使用51單片機(jī)設(shè)計的完整計算器匯編語言程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計的完整計算器匯編語言程序免費(fèi)下載。
    發(fā)表于 07-02 17:42 ?39次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計的完整<b class='flag-5'>計算器</b>匯編語言程序免費(fèi)下載

    使用51單片機(jī)設(shè)計液晶顯示屏LCD1602顯示的計算器程序免費(fèi)下載

    本文的主要內(nèi)容是使用51單片機(jī)設(shè)計液晶顯示屏LCD1602顯示的計算器程序免費(fèi)下載。
    發(fā)表于 06-26 17:43 ?20次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計液晶顯示屏LCD1602顯示的<b class='flag-5'>計算器</b>程序免費(fèi)下載

    使用51單片機(jī)設(shè)計一個簡易加法計算器的C語言程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計一個簡易加法計算器的C語言程序免費(fèi)下載。
    發(fā)表于 06-20 17:44 ?15次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計一個簡易加法<b class='flag-5'>計算器</b>的C語言程序免費(fèi)下載

    使用51單片機(jī)設(shè)計的簡單計算器源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計的簡單計算器源代碼免費(fèi)下載 在下邊,我們將寫一個計算器程序,原理很簡單,只需要在撥號的基礎(chǔ)上
    發(fā)表于 06-14 17:45 ?13次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計的簡單<b class='flag-5'>計算器</b>源代碼免費(fèi)下載

    使用51單片機(jī)設(shè)計簡易計算器的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計簡易計算器的程序免費(fèi)下載。
    發(fā)表于 06-12 17:45 ?17次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計簡易<b class='flag-5'>計算器</b>的程序免費(fèi)下載

    使用51單片機(jī)設(shè)計的計算器的程序和仿真資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計的計算器的程序和仿真資料免費(fèi)下載,可以計算加減乘除小數(shù)點(diǎn)。
    發(fā)表于 06-12 08:00 ?7次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計的<b class='flag-5'>計算器</b>的程序和仿真資料免費(fèi)下載

    基于51單片機(jī)計算器Proteus仿真源碼

    基于51單片機(jī)計算器Proteus仿真設(shè)計資料
    發(fā)表于 05-22 15:59 ?3次下載

    基于51單片機(jī)的簡易計算器設(shè)計

    基于51單片機(jī)的簡易計算器設(shè)計(實(shí)物)
    發(fā)表于 01-02 10:02 ?46次下載

    基于51單片機(jī)計算器設(shè)計

    電子發(fā)燒友網(wǎng)站提供《基于51單片機(jī)計算器設(shè)計.rar》資料免費(fèi)下載
    發(fā)表于 01-03 11:33 ?25次下載

    基于51單片機(jī)計算器設(shè)計

    電子發(fā)燒友網(wǎng)站提供《基于51單片機(jī)計算器設(shè)計.rar》資料免費(fèi)下載
    發(fā)表于 01-12 09:17 ?42次下載