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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機地鐵模擬Proteus仿真圖與源程序

[復制鏈接]
跳轉到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


有如下按鈕:
增加人數
減少人數
自動模式
手動模式
增加燈的個數
減少燈的個數
增加亮度
減少亮度

單片機源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include "beep.h"
  4. #include "delay.h"
  5. #include "adc0832.h"
  6. #include "key.h"
  7. #include "led.h"
  8. #include "val.h"
  9. #include "LCD.h"

  10. //增加人數
  11. sbit add_human_key=P3^0;
  12. //減少人數
  13. sbit dec_human_key=P3^1;
  14. int maxLight = 80;    //最大光照強度
  15. int tempHuman = 100;
  16. int sec = 0;
  17. unsigned char code myNum[] =
  18. {
  19.      0x00, 0x01, 0x03, 0x07,
  20.      0x0F, 0x1F, 0x3F, 0x7F,
  21.      0xFF
  22. };
  23. unsigned char int_time;        //記錄中斷次數
  24. void timerInit();
  25. void myFunction(void);
  26. int human_num = 50;     //人數
  27. int lignt_num = 0;     //光照強度


  28. int main()
  29. {
  30.         //系統初始化
  31.         init_beep();   //蜂鳴器初始化
  32.         pin_init();    //引腳初始化
  33.         init_led();
  34.         timerInit();   //定時器初始化函數
  35.         int_time=0;    //中斷次數初始化
  36.         init_led();
  37.         while(1)
  38.         {
  39.                 if(add_human_key == 0)    //增加人數
  40.                 {
  41.                         delay(100);   //延時10ms
  42.                         if(add_human_key == 0)
  43.                         {
  44.                                 human_num++;
  45.                                 if(human_num>=200) human_num = 200;
  46.                         }
  47.                 }
  48.             if(dec_human_key == 0)    //減少人數
  49.                 {
  50.                         delay(100);   //延時10ms
  51.                         if(dec_human_key == 0)
  52.                         {
  53.                                 human_num--;
  54.                                 if(human_num<=0) human_num = 0;
  55.                         }
  56.                 }
  57.                 my_key();
  58.                 myFunction();
  59.                 //獲取光照強度
  60.                 lignt_num = Adc0832(1) / 51.00 * 20.00;  //0-100%  的光照強度
  61.                 Display(MyPwm, led_num, human_num);
  62.         }               
  63. }
  64. //定時器初始化
  65. void timerInit()
  66. {
  67.         TMOD=0x11;                //方式1 16位計數器
  68.         TH0=(65536-10)/256;
  69.         TL0=(65536-10)%256;
  70.         EA=1;               //開總中斷
  71.         ET0=1;                     //開定時器0中斷
  72. //        ET1 = 1;                        //開定時器1中斷
  73.         TR0=1;                     //啟動定時器0
  74. //        ET1=1;              //啟動定時器1
  75. //        EX1 = 1;         //開啟外部中斷0
  76. }
  77. //外部中斷函數1
  78. void time1() interrupt 1
  79. {  
  80.          TH0=(65536-50000)/256;
  81.          TL0=(65536-50000)%256;     //0.01ms
  82.          TR0=1;                     //啟動定時器0
  83.          int_time ++;        //每來一次中斷,中斷次數int_time自加1
  84.          
  85.          if(int_time>=100)   //夠20次中斷,即1秒鐘進行一次檢測結果采樣
  86.          {
  87.                 int_time=0;    //中斷次數清0
  88.          }
  89.         if(int_time <= MyPwm)   //
  90.          {
  91. //                myFunction();
  92.          }                 
  93. }
  94. //控制邏輯程序
  95. void myFunction(void)
  96. {
  97.         if(setFlag == 0)   //自動邏輯
  98.         {
  99.                 if(lignt_num >= maxLight)
  100.                 {
  101.                         led_num = 0; //全滅
  102.                         MyPwm = 0;
  103.                 }
  104.                 else
  105.                 {
  106.                         
  107.                         if(human_num > tempHuman)
  108.                         {  
  109.                                 led_num = 8;  //全亮
  110.                                 MyPwm = 100;
  111.                         }
  112.                         else if(human_num < tempHuman && human_num > 0)
  113.                         {
  114.                                 led_num = 4; //一半
  115.                                 MyPwm = 50;
  116.                         }
  117.                         else if(human_num == 0)
  118.                         {
  119.                                 led_num = 0; //人為零,則亮度,燈都為零
  120.                                 MyPwm = 0;
  121.                                 beep_work();
  122.                         }
  123.                 }
  124.                 P1 = myNum[led_num];
  125.         }
  126.         else     //手動邏輯
  127.         {
  128.                 P1 = myNum[led_num];
  129.                
  130.         }
  131.                
  132.         
  133. }
復制代碼
Keil代碼與Proteus仿真下載:
本人初學,僅供參考,存在錯誤和不足之處,請大家回帖多多指教,切勿照搬,文件下載:
地鐵.7z (116.79 KB, 下載次數: 12)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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