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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ce單片機綜合實驗程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:345838 發表于 2018-6-6 00:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機綜合實驗源程序如下:
  1. #include<reg52.h>
  2. #include "disp.h"
  3. #include "text.h"
  4. #include "readkey.h"
  5. uint  code pulse_tab[100]={//脈沖數
  6.                                                 213, 224, 235, 246, 258, 270, 283, 296, 310, 324,
  7.                                                 339, 354, 370, 387, 404, 421, 439, 458, 477, 497,
  8.                                                 518, 539, 561, 583, 606, 630, 654, 680, 705, 731,
  9.                                                 758, 786, 814, 843, 873, 903, 934, 965, 997,1030,
  10.                                                 1063,1097,1131,1166,1202,1238,1274,1311,1348,1386,
  11.                                                 1424,1463,1502,1542,1581,1621,1662,1702,1743,1784,
  12.                                                 1825,1867,1908,1950,1991,2033,2075,2116,2158,2200,
  13.                                                 2241,2283,2324,2365,2406,2447,2487,2527,2567,2607,
  14.                                                 2646,2686,2724,2763,2801,2838,2876,2913,2949,2985,
  15.                                                 3020,3056,3090,3124,3158,3191,3224,3256,3288,3319};
  16. //uchar code tab[]={0x4f,0xbf,0xdf,0xef,0xf4,0xfb,0xfd,0xfe,0xff};//串行口
  17. void work_0();//時鐘模塊
  18. void work_1();//時間設置模塊
  19. void work_2();//鬧鐘時間設置模塊
  20. void work_3();//溫度顯示模塊
  21. void rkey();//矩陣鍵盤按鍵解釋
  22. //void work_4();
  23. void init();//初始化函數
  24. void Delay();//延時函數

  25. void init()
  26. {
  27.         TMOD=0x51; //T1作計數器        T0作定時器 工作方式1
  28.         SCON=0X00;
  29. //        TCON=0x00;
  30.         TH0=0xf0;
  31.         TL0=0x60;
  32.         TR0=1;
  33.         msta=0;
  34. //        cnt1=0;
  35.         xs=0;
  36. //        buf0=0;
  37.         num4=1;//時鐘顯示初始值
  38.         num3=4;
  39.         num2=3;
  40.         num1=0;
  41.         nz4=1; //鬧鐘初始值
  42.         nz3=4;
  43.         nz2=3;
  44.         nz1=1;

  45. }

  46. void main()
  47. {         
  48.         init();
  49.         while(1)
  50.         {
  51.                 while(!TF0);
  52.                 TH0=0xF0;
  53.                 TL0=0x60;
  54.                 TF0=0;
  55.                 readkey();
  56.                 disp(light,num4,num3,num2,num1);                                       
  57.                 switch(msta)
  58.                 {        
  59.                         case 0:                        
  60.                                 work_0();
  61.                                 break;
  62.                         case 1:                        
  63.                                 work_1();
  64.                                 break;
  65.                         case 2:                        
  66.                                 work_2();
  67.                                 break;
  68.                          case 3:                        
  69.                                 work_3();
  70. //                        case 4:                        
  71. //                                work_4();
  72. //                                break;
  73.                         default:break;
  74.                 }
  75.         }                        
  76. }        

  77. void work_0()  //時鐘模塊
  78. {
  79.     light=18;

  80.            mcnt1++;
  81.         if(nz1==num1 && nz2==num2 && nz3==num3 && nz3==num3&&dp_1==1)//到設定鬧鐘的時間
  82.         { //串行數碼管顯示“三”
  83.          SBUF = 0x6d;
  84. //         flon=1;
  85. //     tzsta++;
  86. //         if(tzsta>=4)
  87. //         tzsta=0;
  88.         }
  89.         else
  90.         {
  91.         SBUF =0xff;
  92. //         flon=0;
  93.         }
  94.         if(mcnt1>=125)//500ms到
  95.                 {
  96.                 dp_1^=1;
  97.                 a++;
  98.                 mcnt1=0;
  99.                 }

  100.                 if(a>120) //1s到
  101.                   {a=0;
  102.                    num1++; //秒滿60,秒歸零,向分進位
  103.                         if(num1>=0x0a)                        
  104.                         {num1=0;
  105.                          num2++;
  106.                           if(num2>=0x06)
  107.                           {num2=0;                 //分滿60,分歸零,
  108.                            if(num4<2)        //時的十位在小于2區間,即十位為0或為1時
  109.                                 {num3++;        //時的個位可取0到9,即可以從0加到9
  110.                                  if(num3>=0x0a)
  111.                                  {num3=0;         //時的個位滿10,歸零,向十位進一
  112.                                  num4++;
  113.                                  }
  114.                                 }
  115.                            else                        //當十位大于等于2時
  116.                                 {num3++;         //時的個位正常增加
  117.                                  if(num3>=0x05)        //直到時的個位因分為60進1,由4變為5的瞬間
  118.                                  {num1=num2=num3=num4=0; //各個顯示位都被置零
  119.                                  }
  120.                                 }
  121.                           }
  122.                      }
  123.                    }

  124.       
  125.         if(sw1)//跳轉時間設置模塊
  126.         {
  127.         msta=1;
  128.         flon=1;
  129.         dp_1=1;
  130.         }
  131.         if(K9) //跳轉鬧鐘設置模塊
  132.         {
  133.         msta=2;
  134.         num11=num1;//存儲當前時間
  135.         num22=num2;
  136.         num33=num3;
  137.         num44=num4;
  138.         }
  139.         if(sw2)//跳轉溫度計模塊
  140.         {
  141.         msta=3;
  142.         flon=0;        
  143.         dp_1=0;
  144.         num11=num1;        //存儲當前時間
  145.         num22=num2;
  146.         num33=num3;
  147.         num44=num4;
  148.         }               
  149.         
  150. }        
  151. void work_1()  //時間設置
  152. {   
  153.         light=19;

  154.         if(sw1)//跳轉時鐘模塊
  155.         {
  156.         msta=0;
  157.         flon=0;
  158.         }
  159.         if(K9) //跳轉鬧鐘設置模塊
  160.         {
  161.         msta=2;
  162.         num11=num1;//存儲當前時間
  163.         num22=num2;
  164.         num33=num3;
  165.         num44=num4;
  166.         }

  167.         if(K11)//選擇閃控位
  168.         {
  169.          tzsta++;
  170.          if(tzsta>=4)
  171.          tzsta=0;               
  172.         }
  173.         if(K10)
  174.         {
  175.          switch(tzsta)//設置
  176.        {
  177.         case 0: num1++;
  178.                                 if(num1>=0x0a)
  179.                                 num1=0;
  180.                        break;
  181.                 case 1: num2++;
  182.                                 if(num2>=0x06)
  183.                                 num2=0;
  184.                        break;
  185.                 case 2: num3++;
  186.                                 if(num3>=0x0a)
  187.                                 num3=0;
  188.                        break;
  189.                 case 3: num4++;
  190.                                 if(num4>=0x06)
  191.                                 num4=0;
  192.                        break;
  193.                 default: break;                                
  194.                 }
  195.     }
  196. }

  197. void work_2() //鬧鐘設置
  198. {
  199.         light=20;
  200.         num1=nz1;
  201.         num2=nz2;
  202.         num3=nz3;
  203.         num4=nz4;
  204.         if(sw1)        //跳轉時鐘模塊
  205.         {        
  206.          msta=0;
  207.          flon=0;
  208.          num1=num11;
  209.          num2=num22;
  210.          num3=num33;
  211.          num4=num44;
  212.         }
  213.           if(K11)
  214.         {
  215.          tzsta++;
  216.          if(tzsta>=4)
  217.          tzsta=0;               
  218.         }

  219.         rkey();
  220.         switch(tzsta)//設置
  221.        {
  222.         case 0: if(K10)
  223.                                 {nz1=xs;
  224.                                 num1=xs;}
  225.                        break;
  226.                 case 1: if(K10)
  227.                                 {nz2=xs;
  228.                                 num2=xs;}
  229.                        break;
  230.                 case 2: if(K10)
  231.                                 {nz3=xs;
  232.                                 num3=xs;}
  233.                        break;
  234.                 case 3: if(K10)
  235.                                 {nz4=xs;
  236.                                 num4=xs;}
  237.                        break;
  238.                 default: break;                                
  239.                 }
  240. }   

  241. void work_3()//顯示溫度
  242. {
  243.           uint a,b;
  244.      light=21;

  245.                          pulse_cnt++;//脈沖時間計數
  246.                 if(pulse_cnt>=25)
  247.                 {        
  248.                         pulse_cnt=0;
  249.                         TR1=0;                                                         
  250.                         t_1=TH1;
  251.                         t_0=TL1;
  252.                         TH1=TL1=0;
  253.                         TR1=1;         
  254.                 }
  255.                 tt=(t_1<<8)+t_0;

  256.      if(tt>pulse_tab[x])x++;
  257.          else
  258.      if(tt<=pulse_tab[x-1]&&x!=0)x--;
  259.                         
  260.             a=tt-pulse_tab[x];
  261.             b=pulse_tab[x]-tt;
  262.                
  263.                 if(b<=a)y=x-1;
  264.                 else y=x;
  265.                
  266.                 num4=16;  //顯示溫度
  267.                 num3=y/10;
  268.                 num2=y%10;
  269.                 num1=12;

  270.                 if(sw2)        //返回時鐘模塊
  271.                 {
  272.                 msta=0;
  273.                 num1=num11;
  274.                 num2=num22;
  275.                 num3=num33;
  276.                 num4=num44;
  277.                 }
  278. //                if(K0)        //脈沖數測試
  279. //                {
  280. //        num4=buf2/1000;
  281. //        num3=buf2%1000/100;         
  282. //        num2=buf2%100/10;
  283. //        num1=buf2%10;
  284. //        }
  285. }

  286. //void work_4()
  287. //{        mcnt1++;
  288. //        light=18;
  289. //         SBUF = 0x6d;
  290. //        flon=1;
  291. //     tzsta++;
  292. //         if(tzsta>=4)
  293. //         tzsta=0;
  294. //   if(mcnt1>=125)//500ms到
  295. //                {
  296. //                dp_1^=1;
  297. //                a++;
  298. //                mcnt1=0;
  299. //                }
  300. //
  301. //                if(a>120) //1s到
  302. //                  {a=0;
  303. //                   num1++; //秒滿60,秒歸零,向分進位
  304. //                        if(num1>=0x0a)                        
  305. //                        {num1=0;
  306. //                         num2++;
  307. //                          if(num2>=0x06)
  308. //                          {num2=0;                 //分滿60,分歸零,
  309. //                           if(num4<2)        //時的十位在小于2區間,即十位為0或為1時
  310. //                                {num3++;        //時的個位可取0到9,即可以從0加到9
  311. //                                 if(num3>=0x0a)
  312. //                                 {num3=0;         //時的個位滿10,歸零,向十位進一
  313. //                                 num4++;
  314. //                                 }
  315. //                                }
  316. //                           else                        //當十位大于等于2時
  317. //                                {num3++;         //時的個位正常增加
  318. //                                 if(num3>=0x05)        //直到時的個位因分為60進1,由4變為5的瞬間
  319. //                                 {num1=num2=num3=num4=0; //各個顯示位都被置零
  320. //                                 }
  321. //                                }
  322. //                          }
  323. //                     }
  324. //                   }
  325. //        if(K8)
  326. //        {
  327. //        msta=0;
  328. //        flon=0;
  329. //        SBUF =0xff;
  330. //        }
  331. //        if(sw1)//跳轉時間設置模塊
  332. //        {
  333. //        msta=1;
  334. //        flon=1;
  335. //        dp_1=1;
  336. //        }
  337. //        if(K9) //跳轉鬧鐘設置模塊
  338. //        {
  339. //        msta=2;
  340. //        num11=num1;//存儲當前時間
  341. //        num22=num2;
  342. //        num33=num3;
  343. //        num44=num4;
  344. //        }
  345. //        if(sw2)//跳轉溫度計模塊
  346. //        {
  347. //        msta=3;
  348. //        flon=0;        
  349. //        dp_1=0;
  350. //        num11=num1;        //存儲當前時間
  351. //        num22=num2;
  352. //        num33=num3;
  353. //        num44=num4;
  354. //        }
  355. //         
  356. //         
  357. //}

  358. void rkey()        //矩陣鍵盤掃描按鍵解釋
  359. {
  360.         if(K0)xs=0;
  361.         if(K1)xs=1;
  362.         if(K2)xs=2;
  363.         if(K3)xs=3;
  364.         if(K4)xs=4;
  365.         if(K5)xs=5;
  366.         if(K6)xs=6;
  367.         if(K7)xs=7;
  368.         if(K8)xs=8;
  369.         if(K9)xs=9;
  370. }

  371. void Delay(uint x)
  372. {
  373. uint i,j;
  374. for(i=0;i<x;i++)
  375.    for(j=0;j<100;j++);
  376. }
復制代碼

所有資料51hei提供下載:
ce綜合.rar (68.45 KB, 下載次數: 5)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品网| 网站黄色av | 成人一区二区三区视频 | 精品一二区 | 亚洲精品丝袜日韩 | 色婷婷综合久久久中字幕精品久久 | 亚洲三级av | 国产福利在线播放麻豆 | 国产精品美女久久久久久免费 | 午夜网址| 蜜桃视频成人 | 最新一级毛片 | 亚洲第一在线 | 日韩欧美亚洲 | 美国av毛片| 玖玖玖在线观看 | 精品国产99 | 亚洲高清在线观看 | 99久久久99久久国产片鸭王 | 日本黄色一级片视频 | 久久精品国产久精国产 | 色视频网站在线观看 | 亚洲视频免费 | 亚洲欧美一区二区三区国产精品 | 成人区精品一区二区婷婷 | 亚洲不卡在线观看 | 97精品超碰一区二区三区 | 国产精品一区二区av | 一区二区三区免费在线观看 | 亚洲成人免费在线 | 日韩中文字幕在线不卡 | 成人片网址 | 久久精品一区二区 | 亚洲精品在线播放 | 在线精品一区 | 在线视频日韩精品 | 免费在线观看一区二区 | 亚洲欧美中文字幕在线观看 | 国产成人精品免费 | 国产一级片精品 | 天天看天天爽 |