找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2537|回复: 0
打印 上一主题 下一主题
收起左侧

单片机控制电影院人数显示的设计报告与源码

[复制链接]
跳转到指定楼层
楼主
ID:310451 发表于 2018-4-18 07:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机控制电影院人数显示
学    院:       机械工程      
姓    名:        杨        
学    号:      S2012007002     
指导教师:      魏教授     

一、题目要求
某电影院可容纳99人,分别有一个入口和一个出口。设计一个单片机控制装置,要求时刻显示院内的人数,超过90人时报警提示,可以手动操作清除显示、可以手动改变报警阀值在70——90之间变化。
设计对应的单片机系统、供电系统、进出人的计数传感装置,报警的形式。现实人数的显示方式。
二、使用方法
1、通电后显示“00”
2、设置报警阈值(70—90):按第一个按钮是加,按第二个按钮是减
3、两对红外发光二极管与光敏二极管,一个进人,即挡上红外二极管时数码管显示加一;个出人,即挡上红外发光二极管时数码管显示减一。而当计数值大于等于设定的报警阈值时,蜂鸣器开始响。
4、如果你想重新计数,可以按第三个按钮实现手动清零
三、调试
1、确定设计思路,采用调用中断的方式来计数
2、熟悉电路知识,进行电路设计:①片机的复位电路采用自动复位;②振荡电路设计;③数码管显示电路如果用P0口的话,必须有上拉电阻,其他口不用;④比较电路设计;⑤蜂鸣器的驱动电路
3、熟悉Proteus软件,在Proteus中绘制电路原理图
4、熟悉C语言相关的知识,在Keil uVision3中进行编程、编译,看有没有错误,同时编译时要记得生成一个Hex文件,在仿真时用。
5、把生成的Hex文件调入Proteus中的单片机中,看程序能否实现所要求功能。遇到的问题:①起初数码管没显示,是因为我程序中没给它赋初值“00”;② 点仿真按钮后,数码管总显示“80”,经检查发现P0口没有接上拉电阻;③计数进位时,总有一个数不显示,检查发现比较条件不合理;④报警时就响一声,而不是一直报警,把程序的条件语句改了一下;⑤蜂鸣器一开始只和一电阻串联不工作,之后换做了三极管驱动
6、通电后,数码管显示“88”,经检查连接线路,复位电路没有接地
7、检查单片机工作电压,晶振是否工作,都正常
8、在单片机电源与地之间接上一个1uF的电容,避免电磁干扰
9、线路有虚焊的地方,又重新连接
10、振荡电路的晶振和电容排布的离单片机太远有干扰,又重新调整
11、比较器的电阻过小,又换了一个47k大电阻
12、单片机的EA引脚没有接高电平,这样对于AT系列的单片机会一会儿高电平一会儿低电平,工作不稳定
13、检测光敏二极管在通断时的电压,看是否有高低变化,如果没有,说明电阻不合适,在断时不能将电压拉下来,换了一个47K电阻;还是不通,调整了一下红外发光二极管与光敏二极管的对射位置,通了
四、所需器材
AT89C52单片机、晶振6MHZ、电解电容、LM339比较器、74HC245、数码管(共阴极)、按钮、三极管、蜂鸣器、红外发光二极管、光敏二极管、电阻、电容、导线
五、所需软件
Proteus、Keil uVision3、Altium Designer
六、电路原理图
七、制板图
八、实物图
九、工作源程序
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define unit unsigned int
  4. sbit jinren=P3^2;
  5. sbit churen=P3^3;
  6. sbit shezhi_jian=P1^1;
  7. sbit shezhi_jia=P1^0;
  8. sbit baojing=P3^7;
  9. sbit qingling=P1^2;
  10. void delay(uchar);
  11. char j=0;
  12. char h=0;
  13. char k=0;
  14. char i=7;
  15. char code table[]=
  16. {
  17. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,
  18. 0x7d,0x07,0x7f,0x6f
  19. };
  20. void jin(void) interrupt 0/中断0
  21. {delay(1);
  22. if(jinren==0)
  23. {
  24. j++;
  25. P2=table[j];
  26. P0=table[h];
  27. if(j>9)
  28. {
  29. j=0;
  30. h++;
  31. P2=table[j];
  32. P0=table[h];
  33. }
  34. if(h>9)
  35. {
  36. h=9;
  37. j=9;
  38. P0=table[h];
  39. P2=table[j];
  40. }
  41. }
  42. }
  43. void chu() interrupt 2/中断1
  44. {
  45. delay(1);
  46. if(churen==0)
  47. {
  48. --j;
  49. P2=table[j];
  50. P0=table[h];
  51. }
  52. if(j<0)
  53. {j=9;
  54. --h;
  55. P0=table[h];
  56. P2=table[j];
  57. }
  58. if(h<0)
  59. {
  60. h=0;
  61. j=0;
  62. P0=table[h];
  63. P2=table[j];
  64. }
  65. }
  66. void main() /主程序
  67. {EA=1;//开全局中断
  68.   EX0=1;//开外部中断1
  69.   EX1=1;
  70.   IT0=1;//设置为边沿触发方式
  71.   IT1=1;
  72.   ES=1;
  73.   P0=table[0];
  74.   P2=table[0];
  75.    while(1)
  76. {
  77. if(qingling==0)
  78.   {
  79.   j=0;
  80.   h=0;
  81.   P0=table[h];
  82.   P2=table[j];
  83.   }
  84. else if(shezhi_jia==0)
  85. {delay(100);
  86.   P2=table[k];
  87.   P0=table[i];
  88.   k++;
  89.   if(k>10)
  90.   {
  91.   k=0;
  92.   P2=table[k];
  93.   i++;
  94.   P0=table[i];
  95.   }
  96.   if(i>9)
  97.   {                                                                                                               
  98.   i=7;
  99.   P0=table[i];
  100.   P2=table[k];
  101.   }
  102.   if(i==9)
  103.   {
  104.   k=0;
  105.   P2=table[k];
  106.   P0=table[i];
  107.   }
  108.   if(i<7)
  109.   {
  110.   i=7;
  111.   k=0;
  112.   P0=table[i];
  113.   P2=table[k];
  114.   }
  115.   }
  116. else if(shezhi_jian==0)
  117.   {
  118.   delay(100);
  119.   k--;
  120.   P2=table[k];
  121.   P0=table[i];
  122.   if(k<0)
  123.   {
  124.   k=9;
  125.   i--;
  126.   P2=table[k];
  127.   P0=table[i];
  128.   }
  129.   if(i<7)
  130.   {i=7;
  131.   k=0;
  132.   P0=table[i];
  133.   P2=table[k];
  134.   }
  135.   }                                                                                   
  136. else if((j>=(k-1))&&(h>=i))
  137.   {
  138.   baojing=0;
  139.   }
  140. else if(h>i)
  141.   {
  142.     baojing=0;
  143.               }
  144. else
  145. {
  146. baojing=1;
  147. }
  148.   }
  149. }
  150. void delay(uchar x)
  151. {uchar y;
  152. while(x--)
  153. for(y=0;y<250;y++){}
  154. }
复制代码


完整的Word格式报告51黑下载地址:
单片机作业.doc (2.22 MB, 下载次数: 24)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表