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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2250|回復: 0
打印 上一主題 下一主題
收起左側

51單片機計算器源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:148893 發表于 2016-11-19 19:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
完整代碼下載:http://www.zg4o1577.cn/bbs/dpj-60002-1.html

  1. #include "reg51.h"
  2. #include "液晶.h"
  3. #include "ds1302.h"
  4. #include "math.h"
  5. #include "timer.h"
  6. #include "delay.h"
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. #define pi 3.141592653
  10. //特殊位定義
  11. sbit func=P3^5;//因為是4行5列,需要9個數據口,這個地方單獨聲明3.5口作為調節時間使用
  12. sbit fun_math=P3^6;
  13. sbit beep=P2^4;
  14. //全局變量定義,這個地方可以統一使用一個結構體進行操作。
  15. //計算器部分全局變量
  16. uchar dis_time=0; //當distime為1時,顯示一次時間,
  17. uchar state=0;        //定義系統所處的狀態0-1-2-3
  18. uchar codes;//定義當前輸入鍵值
  19. uchar key_num[10]; //
  20. uchar key_n=0;//記錄按下的次數
  21. uchar arith=0;//定義運算符號
  22. long data0;  //第一個數據 ,因為計算器是對兩個數據進行計算,這個第一個輸入的數據
  23. long data1;  //第二個數據  這是第二個數據的數據,按下等號鍵后對這兩個數據進行相關運算
  24. uchar point_en=0; //小數點使能,一個數據中只能有一個小數點,這個變量作為控制小數點輸入的開關
  25. double result1=0; //最終的運算結果
  26. uchar dis_num=0;//記錄結果中的個數
  27. uchar fir_n=0;        //
  28. uchar unlock=0;         //鍵盤不鎖住
  29. uchar clear=0;//清除系統的全局性標志變量
  30. uchar neg_label=0;        //輸入負號的標志變量
  31. uchar wrong=0; //計算超限標志位
  32. uchar TIM=0;//控制大約1S顯示一次時間
  33. unsigned char get_fun=0;

  34. uchar code dis[20]={
  35.            0XE7,0XEB,0XDB,0XBB,0XED,0XDD,0XBD,
  36.         0XEE,0XDE,0XBE,0XD7,0XB7,0X77,0X7B,0X7D,0X7E,
  37.         0X0E,0X0D,0X0B,0X07
  38. };//矩陣鍵盤鍵值
  39. uchar dat_out[12];
  40. uchar code mathlabel[4]={43,45,42,47};//運算符
  41. extern uchar time_en; //顯示時間使能
  42. extern uchar en_alarm;  // 鬧鐘使能
  43. extern uchar cursor;
  44. //萬年歷部分的標志變量
  45. //顯示星期字符


  46. uchar point_x[4];//
  47. ////////////////////////////////////////////////////
  48. /**********************************
  49.                           *                 開始界面計算器部分的程序

  50. /////////
  51. /*****************************
  52. * 函數名稱:計算器變量初始化 init_var
  53. * 函數功能:初始化計算器 所使用的變量
  54. *
  55. *
  56. *
  57. ********************************************/
  58. void init_var()
  59. {
  60.    uchar i=0;
  61.    point_en=1;//允許輸入小數點
  62.    state=0;
  63.    unlock=0;
  64.    arith=0;
  65.    fir_n=0;
  66.    neg_label=1;
  67.    wrong=0;

  68.    for(i=0;i<10;i++)
  69.    {
  70.       key_num[i]=0;
  71.    }
  72. }
  73. /*****************************
  74. * 函數名稱:鍵盤掃描函數 keyscan
  75. * 函數功能:對矩陣鍵盤進行掃描,獲取鍵值

  76.    7   8   9   +(光標選擇)   復位/時鐘

  77.    4   5   6   -                          改時間/設鬧鐘

  78.    1   2   3   *                                      增加

  79.    0   .   =    /                                   減小
  80. *
  81. *
  82. *
  83. ********************************************/
  84. void keyscan()
  85. {
  86.     uchar mm;

  87.         uchar mm2=0;
  88.         uchar i=0;
  89.         mm=0;
  90.         P1=0XF0;
  91.     mm=P1;//讀數據
  92.         mm=mm&0XF0;        
  93.         if(mm!=0xf0||func==0||fun_math==0)//需要對func 進行判斷
  94.         {
  95.             delay(20);
  96.                 mm=P1;
  97.                    mm=mm&0XF0;                          //消抖
  98.             if(mm!=0xF0||func==0||fun_math==0)
  99.                 {
  100.                      unlock=1;
  101.                          if((func!=0))
  102.                      {
  103.                              if(fun_math!=0)
  104.                                  {
  105.                                      P1=0X0F;
  106.                                      for(i=0;i<20;i++);
  107.                                          mm2=P1;
  108.                                          mm2=mm2&0x0f;
  109.                                      mm=mm+mm2;
  110.                                       for(i=0;i<16;i++)//讀取0-15鍵值
  111.                                      {
  112.                                                          if(mm==dis[i])
  113.                                                         {
  114.                                                            codes=i;
  115.                                                         }                 
  116.                                           }                                
  117.                                          if(codes==15&&time_en==1)//這個地方考慮到使用復用功能----光標顯示位置控制
  118.                                          {
  119.                                             if(en_alarm>0)
  120.                                                    {
  121.                                                   cursor++; // 是這個的原因
  122.                                                   delay(300);//盡量簡單處理
  123.                                                 }                        
  124.                                          }        
  125.                                  
  126.                                  }
  127.                                   else
  128.                              {
  129.                                            P1=0XFF;
  130.                                          get_fun=0;
  131.                                          fun_math=0;
  132.                                          mm=P1&0X0F;
  133.                                          for(i=16;i<20;i++)
  134.                                          {
  135.                                             if(mm==dis[i])
  136.                                                   {
  137.                                                     codes=i+1; //分別對應的是sin  cos tan log這些函數
  138.                                                  }                                 
  139.                                          }
  140.                                          fun_math=1;
  141.                                          delay(30);        
  142.                                          get_fun=1;
  143.                                    //這個地方應該直接求函數了
  144.                           
  145.                              }                                                  
  146.                           }
  147.                           else //16-19  萬年歷控制
  148.                           {
  149.                                    P1=0XFF;
  150.                                  func=0;
  151.                                  mm=P1&0X0F;
  152.                                  for(i=16;i<20;i++)
  153.                                  {
  154.                                     if(mm==dis[i])
  155.                                           {
  156.                                             codes=i;
  157.                                          }                                 
  158.                                  }
  159.                                  func=1;
  160.                                  delay(30);                          
  161.                           }        
  162.                
  163.                 }
  164.          }
  165. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久99国产精品免费 | 美女黄视频网站 | 在线免费观看黄色 | 国产十日韩十欧美 | 国产综合av| 日韩在线精品视频 | 中文字幕亚洲一区二区三区 | 日本一级淫片免费啪啪3 | 毛片在线看片 | 日韩综合网 | 一区二区日本 | 欧洲精品久久久久毛片完整版 | 美女黄色在线观看 | 日韩一区av | 二区不卡 | 国产精品久久久久久 | 91av免费观看| 亚洲国产精品99久久久久久久久 | 一级黄色毛片 | 日本一二区视频 | 久久综合99 | 综合精品| 国产综合久久久 | 亚洲女人天堂成人av在线 | 国产黄色精品 | 在线免费国产 | 黄色毛片一级 | 国产精品久久 | 亚洲精品久久久一区二区三区 | 91社区在线观看播放 | 国产精品成人久久久久 | 黄色大片免费观看 | 黄色在线免费播放 | 色综合成人网 | 黄色在线观看国产 | 日韩欧美亚洲 | 一级黄色大片 | 99久久中文字幕三级久久日本 | 91久久久精品国产一区二区蜜臀 | 久久夜夜 | 在线观看国产三级 |