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

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

QQ登錄

只需一步,快速開始

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

51單片機(jī)教室人數(shù)監(jiān)控系統(tǒng) 12864顯示 Proteus仿真程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
51單片機(jī)12864仿真,教室人數(shù)監(jiān)控系統(tǒng)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. //EDM12864B DRIVE//
  2. /**************************************
  3.    PAGEADD為頁(yè)地址起使
  4.    TIERADD為行地址起使
  5.    DIS_STARTADD為開始命令
  6.    CTABLE為漢字字庫(kù)數(shù)組
  7.    ETABLE為英文字庫(kù)數(shù)組
  8. ***************************************/
  9. #include <reg51.h>

  10. #define        uchar unsigned char
  11. #define uint unsigned int
  12. #define High 1
  13. #define Low        0
  14. #define _nop {}
  15. #define PAGEADD 0xb8
  16. #define TIERADD 0x40
  17. #define DIS_STARADD 0xc0
  18. #define All_Seat 50
  19. uint key_value;
  20. sbit DI=P1^4;
  21. sbit E=P1^2;
  22. sbit CS1=P1^1;
  23. sbit CS2=P1^0;
  24. sbit RW=P1^3;
  25. sbit cs=P1^7;
  26. sbit sclk=P1^6;
  27. sbit dout=P1^5;
  28. sbit I2C_SCL = P3^7;
  29. sbit I2C_SDA = P3^6;
  30. sbit jin_1 = P2^0;          //進(jìn)來傳感器1
  31. sbit chu_1 = P2^1;          //出去傳感器1

  32. //uchar ntable[]={61,49,57,60,19,49,62,49,60,63,55,2,0,0,6,22,56,
  33. //63,68,61,49,57,60,17,51,63,61};//email:analog2006@hotmail.com
  34. uchar data voltage_display[8];
  35. void Init_LCD(void);
  36. void E_Display_L(uchar E_Pagenum,uchar E_Tiernum,uchar E_Temp);
  37. void E_Display_R(uchar E_Pagenum,uchar E_Tiernum,uchar E_Temp);
  38. void C_display_L(uchar C_Pagenum,uchar C_Tiernum,uchar C_Temp);
  39. void C_display_R(uchar C_Pagenum,uchar C_Tiernum,uchar C_Temp);
  40. void WRCommand_L(uchar command);
  41. void WRCommand_R(uchar command);
  42. void WRdata_L(uchar ucdata);
  43. void WRdata_R(uchar ucdata);
  44. void CLR_DisplayRAM();
  45. /*****************************
  46.           字符表
  47.          顯示"Welcome Use"
  48. ******************************/
  49. uchar code table1[]={
  50. 0x00,0x3e,0x51,0x49,0x45,0x3e,0x00,0x00,//0(0)
  51. 0x00,0x00,0x42,0x7f,0x40,0x00,0x00,0x00,//1


  52. 0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0xA5,        //"度",8
  53. 0xA6,0xA4,0xFC,0x24,0x34,0x26,0x04,0x00,
  54. 0x40,0x20,0x9F,0x80,0x42,0x42,0x26,0x2A,
  55. 0x12,0x2A,0x26,0x42,0x40,0xC0,0x40,0x00,

  56. 0x10,0x22,0x64,0x0C,0x80,0xFE,0x92,0x92,        //"濕",9
  57. 0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,
  58. 0x04,0x04,0xFE,0x41,0x44,0x48,0x50,0x7F,
  59. 0x40,0x40,0x7F,0x50,0x48,0x64,0x40,0x00,

  60. 0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0xA5,        //"度",10
  61. 0xA6,0xA4,0xFC,0x24,0x34,0x26,0x04,0x00,
  62. 0x40,0x20,0x9F,0x80,0x42,0x42,0x26,0x2A,
  63. 0x12,0x2A,0x26,0x42,0x40,0xC0,0x40,0x00,
  64. };

  65. /********************************
  66.        顯示用的延時(shí)函數(shù)
  67.          延時(shí)長(zhǎng)度有參數(shù) n 決定
  68. *********************************/


  69. void Delay_nms(uchar n)
  70. { uchar a;
  71.    for(;n>0;n--)
  72.       {
  73.            for(a=0;a<100;a++)
  74.               {
  75.                    _nop;
  76.                    _nop;
  77.                    _nop;
  78.                    _nop;
  79.                    };
  80.            };
  81. }
  82. void FullSeat(int num);
  83. void Remain(int num);
  84. void Staff(int num);
  85. void Temperature(int num);
  86. void humidity(int num);
  87. void dst11();
  88. bit DHT_Start();
  89. bit DHT_ByteRead(unsigned char *dat);
  90. void ConfigTimer0(unsigned int ms);
  91. bit flag1s = 0;          //1s定時(shí)標(biāo)志
  92. unsigned char T0RH = 0;  //T0重載值的高字節(jié)
  93. unsigned char T0RL = 0;  //T0重載值的低字節(jié)

  94. void main()
  95. {
  96.         bit tmp;
  97.    uchar a=0,temp=0,b=0,number=0,pagenum=0;
  98.    uchar etable[]={0,0,0,0,0,45,53,60,51,63,61,53,10,69,67,53};//Welcome use
  99.    uchar ttable[]={42,57,61,53,19,10,2,0,0,6,18,1,1,18,0,7};//Time:2006/11/07
  100.    char count_remain=0,count_c=0;
  101.    bit flag=1;
  102.    char temperature_buf[2]={0};
  103.    uchar temperature_display[8]={0};
  104.    //uchar voltage=0; //測(cè)試0831時(shí)使用
  105.    double voltage=0;
  106.    double temp_buffer=0;
  107.    int New_Number=0;
  108.    unsigned char DHT[5];
  109.    int SD,WD;
  110.    static char number_flag;
  111.    EA = 1;            //開總中斷
  112.    Init_LCD();
  113.    ConfigTimer0(10);
  114.    DHT_Start();
  115.         //中文顯示:歡迎使用液晶模塊
  116.    pagenum=0;//在第二行開始顯示
  117.    FullSeat(All_Seat);
  118.    Remain(All_Seat-New_Number);
  119.    Staff(New_Number);
  120.    Temperature(0);
  121.    humidity(0);
  122.         while(1)
  123.         {
  124.                 if(flag1s)
  125.                 {
  126.                         DHT_Start();
  127.                         tmp=DHT_ByteRead(&DHT);
  128.                          if(tmp==1)
  129.                            {
  130.                                    WD= DHT[2];
  131.                                    SD=DHT[0];
  132.                                         Temperature(WD);
  133.                                         humidity(SD);
  134.                            }
  135.                 }
  136.                 if(jin_1!=1 || chu_1!=1)
  137.                 {
  138.                         if(number_flag==1 && chu_1==0)
  139.                         {
  140.                                 number_flag=0;  //進(jìn)入一人
  141.                                 New_Number++;
  142.                                 if(New_Number>50)
  143.                                 {
  144.                                         New_Number=50;
  145.                                 }
  146.                                 Remain(All_Seat-New_Number);
  147.                                 Staff(New_Number);
  148.                                 while(chu_1==0);
  149.                                 continue;
  150.                         }
  151.                         if(number_flag==2 && jin_1==0)
  152.                         {
  153.                                 number_flag=0;  //出去一人
  154.                                 New_Number--;
  155.                                 if(New_Number<0)
  156.                                 {
  157.                                         New_Number=0;
  158.                                 }
  159.                                 Remain(All_Seat-New_Number);
  160.                                 Staff(New_Number);
  161.                                 while(jin_1==0);
  162.                                 continue;
  163.                         }
  164.                         if(number_flag==0)//檢測(cè)到有人進(jìn)入
  165.                         {
  166.                                 if(jin_1==0)
  167.                                 {
  168.                                         number_flag=1;
  169.                                 }
  170.                                 if(chu_1==0)
  171.                                 {
  172.                                         number_flag=2;
  173.                                 }
  174.                         }
  175.                        
  176.                 }
  177.                
  178.         }
  179.                
  180. }

  181. /* 配置并啟動(dòng)T0,ms-T0定時(shí)時(shí)間 */
  182. void ConfigTimer0(unsigned int ms)
  183. {
  184.     unsigned long tmp;  //臨時(shí)變量
  185.    
  186.     tmp = 11059200 / 12;      //定時(shí)器計(jì)數(shù)頻率
  187.     tmp = (tmp * ms) / 1000;  //計(jì)算所需的計(jì)數(shù)值
  188.     tmp = 65536 - tmp;        //計(jì)算定時(shí)器重載值
  189.     tmp = tmp + 12;           //補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差
  190.     T0RH = (unsigned char)(tmp>>8);  //定時(shí)器重載值拆分為高低字節(jié)
  191.     T0RL = (unsigned char)tmp;
  192.     TMOD &= 0xF0;   //清零T0的控制位
  193.     TMOD |= 0x01;   //配置T0為模式1
  194.     TH0 = T0RH;     //加載T0重載值
  195.     TL0 = T0RL;
  196.     ET0 = 1;        //使能T0中斷
  197.     TR0 = 1;        //啟動(dòng)T0
  198. }

  199. /* T0中斷服務(wù)函數(shù),完成1秒定時(shí) */
  200. void InterruptTimer0() interrupt 1
  201. {
  202.     static unsigned char tmr1s = 0;
  203.    
  204.     TH0 = T0RH;  //重新加載重載值
  205.     TL0 = T0RL;
  206.     tmr1s++;
  207.     if (tmr1s >= 100)  //定時(shí)1s
  208.     {
  209.         tmr1s = 0;
  210.         flag1s = 1;
  211.         }

  212.    
  213. }
  214. void FullSeat(int num)
  215. {
  216.         //座位
  217.         C_display_L(0,0*16,0);//0行0列第一個(gè)字
  218.         C_display_L(0,1*16,1);
  219.         E_Display_L(1,2*16,19);
  220.         E_Display_L(1,2*16+8,num/10);
  221.         E_Display_L(1,3*16,num%10);
  222. }
  223. void Remain(int num)
  224. {
  225.         //余座
  226.         C_display_L(2,0*16,4);//0行0列第一個(gè)字
  227.         C_display_L(2,1*16,5);
  228.         E_Display_L(3,2*16,19);
  229.         E_Display_L(3,2*16+8,num/10);
  230.         E_Display_L(3,3*16,num%10);
  231. }
  232. void Staff(int num)
  233. {
  234.                 //人員
  235.         C_display_R(0,0*16,2);//0行0列第一個(gè)字
  236.         C_display_R(0,1*16,3);
  237.         E_Display_R(1,2*16,19);
  238.         E_Display_R(1,2*16+8,num/10);
  239.         E_Display_R(1,3*16,num%10);
  240. }
  241. void Temperature(int num)
  242. {
  243.         //溫度
  244.         C_display_R(2,0*16,6);//0行0列第一個(gè)字
  245.         C_display_R(2,1*16,7);
  246.         E_Display_R(3,2*16,19);
  247.         E_Display_R(3,2*16+8,num/10);
  248.         E_Display_R(3,3*16,num%10);
  249.         E_Display_R(3,3*16+8,25);
  250. }
  251. void humidity(int num)
  252. {

  253. //濕度
  254.         C_display_L(4,0*16,8);//0行0列第一個(gè)字
  255.         C_display_L(4,1*16,9);
  256.         E_Display_L(5,2*16,19);
  257.         E_Display_L(5,2*16+8,num/10);
  258.         E_Display_L(5,3*16,num%10);
  259.         E_Display_L(5,3*16+8,12);

  260. }
  261. void LCD_Busy()
  262. {
  263.   uchar busy;
  264.   E=Low;
  265.   DI=Low;
  266.   RW=High;
  267.   while(1)
  268.   {
  269.     E=High;
  270.     _nop;
  271.         _nop;
  272.     busy=P0;//讀狀態(tài)標(biāo)志寄存器
  273.         _nop;
  274.     E=Low;
  275.     if((busy&0x90)==0)//檢測(cè)BF和RES位,兩者都為零時(shí)表示可進(jìn)行寫入
  276.     break;
  277.   };
  278. }

  279. /*********************************
  280.         寫指令
  281. **********************************/
  282. void WRCommand_L(uchar command)
  283. {
  284.         CS1=High;
  285.         CS2=Low;
  286.         LCD_Busy();
  287.         DI=Low;
  288.         _nop;
  289.         RW=Low;
  290.         _nop;
  291.         E=High;
  292.         _nop;
  293.         P0=command;
  294.         _nop;
  295.         E=Low;
  296.         _nop;
  297. }


  298. void WRCommand_R(uchar command)
  299. {
  300.         CS1=Low;
  301.         CS2=High;
  302.         LCD_Busy();
  303.         DI=Low;
  304.         _nop;
  305.         RW=Low;
  306.         _nop;
  307.         E=High;
  308.         _nop;
  309.         P0=command;
  310.         _nop;
  311.         E=Low;
  312.         _nop;
  313. }


  314. /***********************************
  315.        寫一個(gè)字節(jié)的顯示數(shù)據(jù)
  316. ************************************/
  317. void WRdata_L(uchar ucdata)
  318.   {
  319.    CS1=High;
  320.    CS2=Low;
  321.    LCD_Busy();
  322.    DI=High;
  323.    _nop;
  324.    RW=Low;
  325.    _nop;
  326.    E=High;
  327.    _nop;
  328.    P0=ucdata;
  329.    _nop;
  330.    E=Low;
  331.    _nop;
  332.   }


  333. void WRdata_R(uchar ucdata)
  334.   {
  335.    CS1=Low;
  336.    CS2=High;
  337.    LCD_Busy();  
  338.    DI=High;
  339.    _nop;
  340.    RW=Low;
  341.    _nop;
  342.    E=High;
  343.    _nop;
  344.    P0=ucdata;
  345.    _nop;
  346.    E=Low;
  347.    _nop;
  348.   }

  349. /****************************************************
  350.        字符為16*16顯示,分為兩個(gè)部分寫入32個(gè)字節(jié)
  351.        前16個(gè)字節(jié)寫入第一頁(yè)(16*8),后16個(gè)字節(jié)寫入
  352.            第二頁(yè)(16*8)
  353.            左側(cè)寫入"歡迎",右側(cè)寫入"使用"
  354. *****************************************************/
  355. void C_display_L(uchar C_Pagenum,uchar C_Tiernum,uchar C_Temp)
  356. {
  357.    uchar k;
  358.    C_Pagenum=PAGEADD|C_Pagenum;
  359.    C_Tiernum=TIERADD|C_Tiernum;
  360.    WRCommand_L(C_Pagenum);
  361.    WRCommand_L(C_Tiernum);
  362.    for(k=0;k<16;k++)
  363.       {
  364.        WRdata_L(table2[C_Temp*32+k]);
  365.           };
  366.    C_Pagenum=C_Pagenum+1;
  367.    WRCommand_L(C_Pagenum);
  368.    WRCommand_L(C_Tiernum);
  369.    for(k=0;k<16;k++)
  370.    {
  371.        WRdata_L(table2[C_Temp*32+k+16]);
  372.    };
  373. }

  374. void C_display_R(uchar C_Pagenum,uchar C_Tiernum,uchar C_Temp)
  375.   {
  376.    uchar k;
  377.    C_Pagenum=PAGEADD|C_Pagenum;
  378.    C_Tiernum=TIERADD|C_Tiernum;
  379.    WRCommand_R(C_Pagenum);
  380.    WRCommand_R(C_Tiernum);
  381.    for(k=0;k<16;k++)
  382.       {
  383.        WRdata_R(table2[C_Temp*32+k]);
  384.            };
  385.    C_Pagenum=C_Pagenum+1;
  386.    WRCommand_R(C_Pagenum);
  387.    WRCommand_R(C_Tiernum);
  388.    for(k=0;k<16;k++)
  389.       {
  390.        WRdata_R(table2[C_Temp*32+k+16]);
  391.              };
  392.   }

  393. /****************************************
  394.    寫入西文字符,共11個(gè)字符,左側(cè)寫入6個(gè)
  395.    右側(cè)寫入5個(gè),左側(cè)起始從16開始,右側(cè)從
  396.    0開始
  397. *****************************************/

  398. void E_Display_L(uchar E_Pagenum,uchar E_Tiernum,uchar E_Temp)
  399.   {
  400.    uchar k;
  401.    WRCommand_L(PAGEADD|E_Pagenum);
  402.    WRCommand_L(TIERADD|E_Tiernum);
  403.    for(k=0;k<8;k++)
  404.           {
  405.            WRdata_L(table1[E_Temp*8+k]);
  406.            };
  407.    }   
  408. void E_Display_R(uchar E_Pagenum,uchar E_Tiernum,uchar E_Temp)
  409.    {
  410.    uchar k;
  411.    WRCommand_R(PAGEADD|E_Pagenum);
  412.    WRCommand_R(TIERADD|E_Tiernum);
  413.    for(k=0;k<8;k++)
  414.           {
  415.            WRdata_R(table1[E_Temp*8+k]);
  416.            };
  417.            }

  418. /*********************************
  419.            清除所有顯示RAM內(nèi)容
  420. **********************************/

  421. void CLR_DisplayRAM()
  422.    {
  423. ……………………

  424. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼


全部資料51hei下載地址:
自習(xí)室藍(lán)牙監(jiān)控系統(tǒng)仿真程序.zip (484.31 KB, 下載次數(shù): 86)
自習(xí)室藍(lán)牙監(jiān)控系統(tǒng)仿真.zip (22.18 KB, 下載次數(shù): 77)

單片機(jī)源程序如下:

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:976691 發(fā)表于 2022-4-30 15:44 | 只看該作者
下載了,仿真LED屏幕亂碼是怎么回事
回復(fù)

使用道具 舉報(bào)

板凳
ID:1026908 發(fā)表于 2022-6-5 15:52 | 只看該作者
為什么人員只能顯示00或者01
回復(fù)

使用道具 舉報(bào)

地板
ID:1042050 發(fā)表于 2022-8-14 10:30 | 只看該作者
人體檢測(cè)有仿真模塊嗎?
回復(fù)

使用道具 舉報(bào)

5#
ID:3802 發(fā)表于 2022-12-9 08:51 | 只看該作者
下載了,仿真LED屏幕亂碼是怎么回事
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕国产第一页 | 国产成人精品av | 日本精品久久久久久久 | 99色视频| 欧美日韩在线观看一区 | 99精品欧美一区二区蜜桃免费 | 91麻豆蜜桃一区二区三区 | 欧美色性 | 国产精品久久九九 | 精品亚洲一区二区三区 | 日韩福利电影 | 亚洲成a | 午夜成人在线视频 | 香蕉久久久 | 欧美精品第一页 | 久久人爽 | 国产乱码精品一品二品 | 在线一级片 | 国产乱码精品一区二区三区五月婷 | 久久久久久网站 | 久久精品国产免费看久久精品 | 国产乱码精品一区二区三区五月婷 | 一区二区三区视频在线观看 | 国产精品久久久久久久免费大片 | 久久99国产精品久久99果冻传媒 | 精品一区二区久久 | www.欧美 | 亚洲www| 中文字幕在线一区二区三区 | 97国产精品| h片免费看| 天天夜碰日日摸日日澡 | 久久精品网 | 国产三级在线观看播放 | 欧美极品在线播放 | 红桃视频一区二区三区免费 | 国产乱一区二区三区视频 | 久久成人精品视频 | 亚洲精品456 | 亚洲国产精品一区 | 国产一区二区视频在线 |