久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 9985|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

基于STM32F103RCT6的簡(jiǎn)易計(jì)算器、簡(jiǎn)易密碼鎖程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
分享一篇個(gè)人的博客,如有錯(cuò)誤,請(qǐng)各位指出,不勝感激
https://blog.csdn.net/weixin_46757367/article/details/118395307

以下程序所使用的GPIO口是不連續(xù)的,使用者應(yīng)注意。



STM32單片機(jī)源程序如下:
  1. /*******************************************************************************
  2. * 項(xiàng)目名稱       : 簡(jiǎn)易計(jì)算器
  3. * 項(xiàng)目功能                          : 1、矩陣鍵盤(pán)輸入,LCD1602顯示數(shù)字、符號(hào)
  4.                                                                          2、實(shí)現(xiàn) 兩個(gè) 正整數(shù) 的加減乘除,結(jié)果精確至小數(shù)點(diǎn)后兩位
  5. * 修改內(nèi)容                         : 2021.6.27(完成功能1、2)
  6. * 項(xiàng)目缺陷                          : 1、不能進(jìn)行連續(xù)的運(yùn)算,即每次只能進(jìn)行兩個(gè)數(shù)的加減乘除
  7.                                                                          2、不能進(jìn)行負(fù)數(shù)、小數(shù)以及其它更復(fù)雜的運(yùn)算
  8.                                                                          3、其它
  9. * 注意事項(xiàng)                         : 無(wú)
  10. *******************************************************************************/

  11. #include "calculator_main.h"

  12. void Result(float fin);
  13. void Yunsuan(uint dat1);
  14. void Select(void);

  15. uchar num[] = {'0','1','2','3','4','5','6','7','8','9'};
  16. uchar CHAR[] = {'=','/','*','-','+'};
  17. int Num_1=0,Num_2=0;//用以存儲(chǔ)運(yùn)算符前后的兩個(gè)數(shù)
  18. static float Tatal = 0;//存儲(chǔ)運(yùn)算結(jié)果
  19. uint FLAG = 0, FLAG_X = 0;

  20. int main(void)
  21. {
  22.         //delay_init();
  23.         LCD_Init();
  24.         KEY_Init();
  25.         while(1)
  26.         {
  27.                 Select();
  28.         }
  29. }



  30. /*******************************************************************************
  31. * 函 數(shù) 名       : Result()
  32. * 函數(shù)功能                          : 在LCD1602第2行顯示運(yùn)算結(jié)果
  33. * 輸    入       : 運(yùn)算結(jié)果
  34. * 輸    出       : 無(wú)
  35. *******************************************************************************/
  36. void Result(float fin)
  37. {
  38.         uint k;
  39.         char buf[16];
  40.         LCDWriteCom(0xc0);                //設(shè)置數(shù)據(jù)指針起點(diǎn):第二行,第一個(gè)
  41.         LCDWriteData('=');
  42.         sprintf(buf,"%.2f",fin);//將結(jié)果 fin 轉(zhuǎn)化為字符串 buf,然后向LCD1602打印
  43.         for(k=0;k<strlen(buf);k++)
  44.                 LCDWriteData(buf[k]);
  45. }


  46. /*******************************************************************************
  47. * 函 數(shù) 名       : Yunsuan()
  48. * 函數(shù)功能                          : 按下運(yùn)算符鍵的處理
  49. * 輸    入       : 鍵值
  50. * 輸    出       : 無(wú)
  51. *******************************************************************************/
  52. void Yunsuan(uint dat1)
  53. {
  54.         switch( CHAR[dat1-11] )//**********************************加減乘除
  55.         {
  56.                 case '/':
  57.                         LCDWriteData('/');
  58.                         Select();
  59.                         if(FLAG==0)                                                                                         break;//若清零
  60.                         else if(FLAG>=1 && FLAG_X!=1)                        Select();//若為運(yùn)算符鍵,則繼續(xù)檢測(cè)按鍵
  61.                         else if(FLAG_X==1)                                                                Yunsuan(11);//'='
  62.                         break;
  63.                 case '*':
  64.                         LCDWriteData('*');
  65.                         Select();
  66.                         if(FLAG==0)                                                                                         break;//若清零
  67.                         else if(FLAG>=1 && FLAG_X!=1)                        Select();//若為運(yùn)算符鍵,繼續(xù)檢測(cè)按鍵
  68.                         else if(FLAG_X==1)                                                                Yunsuan(11);//'='
  69.                         break;
  70.                 case '-':
  71.                         LCDWriteData('-');
  72.                         Select();
  73.                         if(FLAG==0)                                                                                         break;//若清零
  74.                         else if(FLAG>=1 && FLAG_X!=1)                        Select();//若為運(yùn)算符鍵,繼續(xù)檢測(cè)按鍵
  75.                         else if(FLAG_X==1)                                                                Yunsuan(11);//'='
  76.                         break;
  77.                 case '+':
  78.                         LCDWriteData('+');
  79.                         Select();
  80.                         if(FLAG==0)                                                                                         break;//若清零
  81.                         else if(FLAG>=1 && FLAG_X!=1)                        Select();//若為運(yùn)算符鍵,繼續(xù)檢測(cè)按鍵
  82.                         else if(FLAG_X==1)                                                                Yunsuan(11);//'='
  83.                         break;
  84.                 case '=':
  85.                         if( (Num_1>0||Num_1==0) && Num_2==0 )
  86.                         {
  87.                                 Tatal = (float)Num_1;
  88.                                 if(FLAG==1||FLAG==2)        Tatal = 0;
  89.                         }
  90.                         else if(Num_1==0 && Num_2!=0 && FLAG!=0 )
  91.                         {
  92.                                 switch(FLAG)
  93.                                 {
  94.                                         default: Tatal = 0; break;
  95.                                         case 3:  Tatal = (float)Num_1 - (float)Num_2;                break;
  96.                                         case 4:  Tatal = (float)Num_1 + (float)Num_2;         break;
  97.                                 }
  98.                         }
  99.                         else if(Num_1!=0 && Num_2!=0 && FLAG!=0 )
  100.                         {
  101.                                 switch(FLAG)
  102.                                 {
  103.                                         case 1:  Tatal = (float)Num_1 / (float)Num_2;                break;
  104.                                         case 2:  Tatal = (float)Num_1 * (float)Num_2;         break;
  105.                                         case 3:  Tatal = (float)Num_1 - (float)Num_2;                break;
  106.                                         case 4:  Tatal = (float)Num_1 + (float)Num_2;         break;
  107.                                 }
  108.                         }
  109.                         Result(Tatal);
  110.                         break;
  111.         }
  112. }


  113. /*******************************************************************************
  114. * 函 數(shù) 名       : Select()
  115. * 函數(shù)功能                          : 判斷按鍵的類型
  116. * 輸    入       : 無(wú)
  117. * 輸    出       : 無(wú)
  118. *******************************************************************************/
  119. void Select(void)
  120. {
  121.         uint flag;
  122.         int Keyvalue;
  123.         while( (Keyvalue=(int)KEY_Input())==16 );//讀取鍵值
  124.         if(Keyvalue<10)//數(shù)字鍵
  125.                 flag = 1;
  126.         else if(Keyvalue>10 && Keyvalue<16)//符號(hào)鍵
  127.                 flag = 2;
  128.         else if(Keyvalue==10)//清零鍵
  129.                 flag = 3;
  130.        
  131.         switch( flag )
  132.         {
  133.                 case 1: //數(shù)字
  134.                         LCDWriteData(num[Keyvalue]);
  135.                         if(FLAG==0)        //運(yùn)算符前的數(shù)字
  136.                         {
  137.                                 Num_1 = Num_1 * 10 + Keyvalue;
  138.                                 Select();
  139.                         }
  140.                         if(FLAG>=1 && FLAG_X!=1)        //運(yùn)算符后的數(shù)字
  141.                         {
  142.                                 Num_2 = Num_2 * 10 + Keyvalue;
  143.                                 Select();
  144.                         }
  145.                         break;
  146.                 case 2: //字符
  147.                         if(Keyvalue==11)                                FLAG_X = 1;//'='
  148.                         else if(Keyvalue==12)                FLAG          = 1;//'/'
  149.                         else if(Keyvalue==13)                FLAG          = 2;//'*'
  150.                         else if(Keyvalue==14)                FLAG          = 3;//'-'
  151.                         else if(Keyvalue==15)                FLAG   = 4;//'+'
  152.                         Yunsuan(Keyvalue);
  153.                         break;
  154.                 case 3: //清零
  155.                         LCDWriteCom(0x01);
  156.                         Num_1 = Num_2 = FLAG = FLAG_X = Tatal = 0;
  157.                         break;
  158.         }
  159. }
復(fù)制代碼


全部資料51hei下載地址:
簡(jiǎn)易計(jì)算器程序.7z (181.77 KB, 下載次數(shù): 278)
簡(jiǎn)易密碼鎖程序.7z (179.63 KB, 下載次數(shù): 156)

1、現(xiàn)代電子技術(shù)期末作品原理圖.rar

1.41 MB, 下載次數(shù): 84, 下載積分: 黑幣 -5

2、期末作品原理圖 程序流程圖.pdf

335.15 KB, 下載次數(shù): 69, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +60 收起 理由
admin + 60 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂4 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:947480 發(fā)表于 2021-7-22 08:56 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:146782 發(fā)表于 2021-7-29 09:57 | 只看該作者
有源代碼的嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:1058512 發(fā)表于 2023-1-14 11:41 | 只看該作者

好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

5#
ID:1062205 發(fā)表于 2023-2-11 15:19 | 只看該作者

這個(gè)特別好
回復(fù)

使用道具 舉報(bào)

6#
ID:1075951 發(fā)表于 2023-5-7 23:08 | 只看該作者
只有程序沒(méi)有仿真,自己連的運(yùn)行不了
回復(fù)

使用道具 舉報(bào)

7#
ID:1126741 發(fā)表于 2024-6-24 14:44 | 只看該作者
  好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久国产麻豆 | 久久这里只有精品首页 | 成人黄色电影在线观看 | 亚洲视频在线免费观看 | 亚洲欧洲激情 | 精品成人免费视频 | 国产精品三级 | 国产精品视频网站 | 欧美韩一区二区三区 | 亚洲高清在线免费观看 | 在线观看视频你懂得 | 亚洲国产一区二区三区在线观看 | 精品欧美视频 | 欧美精品一区二区三区一线天视频 | 一区二区三区免费 | 国产高清在线精品 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 国产精品高潮呻吟久久av野狼 | 国产精品五月天 | 国产成人精品一区二区在线 | 在线中文视频 | 女女百合av大片一区二区三区九县 | 国产精品美女久久久av超清 | 成人在线免费视频观看 | 欧美日韩精品区 | 精品一区在线看 | 成人黄色在线观看 | 精品美女视频在线观看免费软件 | 五月天国产在线 | 国产资源一区二区三区 | 久久久69 | 中文字幕一区二区三区在线观看 | 午夜成人免费视频 | 国产一区二区三区四区区 | 日本色高清| 青青草中文字幕 | 久久这里有精品 | 欧美精品日韩精品国产精品 | 中文字幕第十五页 | 日本三级做a全过程在线观看 | 国产综合第一页 |