找回密码
 立即注册

QQ登录

只需一步,快速开始

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

烟雾报警器的单片机源程序与实物制作

[复制链接]
跳转到指定楼层
楼主



  1. #include <reg52.h>

  2. //宏定义
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define Data_ADC0809 P1
  6. //管脚声明
  7. sbit Feng = P3^0;
  8. //ADC0809
  9. sbit ST=P3^3;
  10. sbit EOC=P3^4;
  11. sbit OE=P3^2;
  12. //按键
  13. sbit Key1=P3^5;
  14. sbit Key2=P3^6;
  15. sbit Key3=P3^7;
  16. //显示数组 0-9+F
  17. uchar Data_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x71,0x3f};
  18. sbit Wei1 = P2^7;
  19. sbit Wei2 = P2^6;
  20. sbit Wei3 = P2^5;
  21. sbit Wei4 = P2^4;
  22. //函数声明
  23. extern uchar ADC0809();
  24. void Display(uchar X,uchar Data);
  25. void delay(uint t);
  26. //酒精含量变量
  27. uchar temp=0;
  28. //蜂鸣器变量
  29. uchar FF=10;
  30. //显示模式
  31. uchar Mode=0;
  32. uchar p;
  33. void main()
  34. {
  35. while(1)
  36. {
  37. //正常模式
  38. if(Mode==0)
  39. {
  40. //读取AD值
  41. temp=ADC0809();
  42. for(p=0;p<30;p++)
  43. Display(0,temp);
  44. //判断是否报警
  45. if(temp>FF)
  46. {
  47. Feng=0;
  48. }
  49. else
  50. {
  51. Feng=1;
  52. }
  53. }
  54. //调整模式
  55. else
  56. {
  57. Display(1,FF);
  58. }
  59. //功能键
  60. if(Key3==0)
  61. {
  62. Feng=0;
  63. delay(100);
  64. while(Key3==0)
  65. {
  66. if(Mode==0)
  67. Display(0,temp);
  68. else
  69. Display(1,FF);
  70. }
  71. if(Mode==0)
  72. Mode=1;
  73. else
  74. Mode=0;
  75. Feng=1;
  76. }
  77. //增加
  78. if(Key2==0&&Mode==1)
  79. {
  80. Feng=0;
  81. delay(100);
  82. while(Key2==0)
  83. {
  84. Display(1,FF);
  85. }
  86. FF++;
  87. if(FF==251)
  88. FF=250;
  89. Feng=1;
  90. }
  91. //减少
  92. if(Key1==0&&Mode==1)
  93. {
  94. Feng=0;
  95. delay(100);
  96. while(Key1==0)
  97. {
  98. Display(1,FF);
  99. }
  100. FF--;
  101. if(FF==0xff)
  102. FF=0;
  103. Feng=1;
  104. }
  105. }
  106. }
  107. //ADC0809读取信息
  108. uchar ADC0809()
  109. {
  110. uchar temp_=0x00;
  111. //初始化高阻太
  112. OE=0;
  113. //转化初始化
  114. ST=0;
  115. //开始转换
  116. ST=1;
  117. ST=0;
  118. //外部中断等待AD转换结束
  119. while(EOC==0)
  120. //读取转换的AD值
  121. OE=1;
  122. temp_=Data_ADC0809;
  123. OE=0;
  124. return temp_;
  125. }
  126. //延时
  127. void delay(uint t)
  128. {
  129. uint i,j;
  130. for(i=0;i<t;i++)
  131. for(j=0;j<10;j++);
  132. }
  133. //显示 X表示状态 Data表示数据
  134. void Display(uchar X,uchar Data)
  135. {
  136. Wei1=1;
  137. Wei2=1;
  138. Wei3=1;
  139. Wei4=1;
  140. P0=0xff;
  141. //正常模式
  142. if(X==0)
  143. {
  144. P0=~Data_[11];
  145. }
  146. //非正常
  147. else
  148. {
  149. P0=~Data_[10];
  150. }
  151. Wei1=0;
  152. Wei2=1;
  153. Wei3=1;
  154. Wei4=1;
  155. delay(10);
  156. Wei1=1;
  157. Wei2=1;
  158. Wei3=1;
  159. Wei4=1;
  160. P0=~Data_[Data/100];
  161. Wei1=1;
  162. Wei2=0;
  163. Wei3=1;
  164. Wei4=1;
  165. delay(10);
  166. Wei1=1;
  167. Wei2=1;
  168. Wei3=1;
  169. Wei4=1;

  170. P0=~Data_[Data/10%10];
  171. Wei1=1;
  172. Wei2=1;
  173. Wei3=0;
  174. Wei4=1;
  175. delay(10);
  176. Wei1=1;
  177. Wei2=1;
  178. Wei3=1;
  179. Wei4=1;
  180. P0=~Data_[Data%10];
  181. Wei1=1;
  182. Wei2=1;
  183. Wei3=1;
  184. Wei4=0;
  185. delay(10);
  186. Wei1=1;
  187. Wei2=1;
  188. Wei3=1;
  189. Wei4=1;
  190. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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