欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1734|回復: 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 單片機教程網

快速回復 返回頂部 返回列表