找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5163|回复: 11
收起左侧

汽车倒车雷达的单片机源程序 12864显示距离温度和时间

  [复制链接]
ID:227918 发表于 2017-8-16 16:06 | 显示全部楼层 |阅读模式
汽车倒车雷达源程序lcd12864显示倒车的距离,及当前温度和时间

单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. /************* 12864LCD引脚定义 *************/

  6. #define LCD_data  P0       //数据口

  7. sbit LCD_RS = P2 ^ 4; //寄存器选择输入
  8. sbit LCD_RW = P2 ^ 5; //液晶读/写控制
  9. sbit LCD_EN = P2 ^ 6; //液晶使能控制
  10. sbit LCD_PSB = P2 ^ 1; //串/并方式控制
  11. uchar address,site;
  12. bit off;
  13. /************Ds1302定义*********************/
  14. #define write_sec  0x80 //写秒
  15. #define read_sec   0x81 //读秒
  16. #define write_min  0x82 //写分钟
  17. #define read_min   0x83 //读分钟
  18. #define write_hour 0x84 //写小时
  19. #define read_hour  0x85 //读小时
  20. #define write_day  0x86 //写日
  21. #define read_day   0x87 //读日
  22. #define write_mon  0x88 //写月
  23. #define read_mon   0x89 //读月
  24. #define write_week  0x8a //写星期
  25. #define read_week   0x8b //读星期
  26. #define write_year 0x8c  //写年
  27. #define read_year  0x8d  //读年
  28. #define write_wp   0x8e //写保护

  29. void  DS1302write_byte(uchar data_a);
  30. void writeDS1302(uchar addr,uchar da);
  31. void initDS1302(void);
  32. void DS1302_time();
  33. void DS1302_display();
  34. void assist_display(void);
  35. void DS1302_key(void);
  36. void DS1302_add(void);
  37. void DS1302_reduce(void);

  38. sbit sclk=P1^5;                   //DS1302时钟信号
  39. sbit dio=P1^6;                   //DS1302数据信号
  40. sbit rst=P1^7;                   //DS1302片选
  41. sbit acc_7=ACC^7;
  42. sbit key0=P1^1;                        //设置键
  43. sbit key1=P1^2;                        //加键
  44. sbit key2=P1^3;                        //减键
  45. uchar  sec,min,hour,day,mon,week,year,time;
  46. bit        set,m,ho,d,mo,w,y,timer,ja,jian;
  47. uchar install;                        //设置时钟
  48. /************Ds18b20定义*********************/
  49. sbit DQ =P3^6;                                  //定义室内DS18B20通信端口
  50. uint t,h;                                                //t:读取温度,h:显示延时
  51. uchar        tt,shi,ge,shi0,ge0,shi1,ge1;                        //tt:处理后的温度,shi:温度十位,ge:温度个位
  52. void init_18b20();                                //复位程序
  53. void write_18b20(uchar data_a);        //写一个字节程序
  54. void  read_t();                                        //读取温度程序
  55. void dispose_t();                                //处理温度
  56. void DS18B20_display();                                        //显示温度
  57. bit Temp_mark;
  58. /*****************超声波测距程序定义******************************/
  59. sbit key3=P1^4;
  60. sbit        led=P3^3;
  61. sbit        buzzer=P2^0;
  62. bit wave,change;
  63. uchar times,Q,delayed;
  64. uint L;
  65. long int S;
  66. bit open;
  67. sbit P1_0=P1^0;
  68. void ultrasonic_key(void);
  69. void ultrasonic_display(void);
  70. void   alerting();                                //报警
  71. /*********************************************************/

  72. unsigned char code DIS1[] =
  73. {
  74.   '0','1','2','3','4','5','6','7','8','9',' '
  75. };
  76. unsigned char code DIS2[] =
  77. {
  78.   "Date:"
  79. };
  80. unsigned char code DIS3[]=
  81. {
  82. ':',' ',':',' ',':',' ',':',' ',':',' '
  83. };
  84. unsigned char code DIS4[]=
  85. {
  86.   'a','m','p'
  87. };
  88. unsigned char code DIS5[]=
  89. {
  90.    "Week:"
  91. };

  92. unsigned char code DIS6[]=
  93. {
  94.    "Monday"
  95. };
  96. unsigned char code DIS7[]=
  97. {
  98.    "Tuesday"
  99. };
  100. unsigned char code DIS8[]=
  101. {
  102.    "Wednesday"
  103. };
  104. unsigned char code DIS9[]=
  105. {
  106.    "Thursday"
  107. };
  108. unsigned char code DIS10[]=
  109. {
  110.    "Friday"
  111. };
  112. unsigned char code DIS11[]=
  113. {
  114.    "Saturday"
  115. };
  116. unsigned char code DIS12[]=
  117. {
  118.    "Sunday"
  119. };
  120. unsigned char code DIS13[]=
  121. {
  122.    "<T>:"
  123. };

  124. unsigned char code DIS15[]=
  125. {
  126.   "          "
  127. };
  128. unsigned char code Photo0[] =
  129. {
  130. /*--  数字0,宽度x高度=32x32  --*/
  131. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFF,0x00,
  132. 0x01,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,
  133. 0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,
  134. 0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,
  135. 0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,
  136. 0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,
  137. 0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x01,0xFF,0xFF,0x80,
  138. 0x00,0xFF,0xFF,0x00,0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  139. };
  140. /******************************************************************************/
  141. unsigned char code Photo1[] =
  142. {
  143. /*--  数字1,宽度x高度=32x32  --*/
  144. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x07,0xE0,0x00,
  145. 0x00,0x0F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x3F,0xE0,0x00,0x00,0x03,0xE0,0x00,
  146. 0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,
  147. 0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,
  148. 0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,
  149. 0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,
  150. 0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x03,0xFF,0xFF,0xE0,
  151. 0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  152. };

  153. unsigned char code Photo2[] =
  154. {
  155. /*--  数字2,宽度x高度=32x32  --*/
  156. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFE,0x00,0x00,0x3F,0xFF,0x00,
  157. 0x00,0x7F,0xFF,0x80,0x00,0xF0,0x07,0x80,0x00,0xF0,0x07,0x80,0x00,0xE0,0x07,0x80,
  158. 0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x80,
  159. 0x00,0x00,0x0F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x78,0x00,
  160. 0x00,0x00,0xF0,0x00,0x00,0x01,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0x80,0x00,
  161. 0x00,0x0F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x78,0x00,0x00,
  162. 0x00,0xF0,0x00,0x00,0x01,0xF0,0x00,0xE0,0x01,0xF0,0x00,0xE0,0x01,0xFF,0xFF,0xE0,
  163. 0x01,0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  164. };

  165. unsigned char code Photo3[] =
  166. {
  167. /*--  数字3,宽度x高度=32x32  --*/
  168. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xF0,0x00,0x01,0xFF,0xF8,0x00,
  169. 0x07,0xFF,0xFC,0x00,0x07,0x80,0x1E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,
  170. 0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,
  171. 0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,0x01,0xFF,0xFC,0x00,0x01,0xFF,0xF8,0x00,
  172. 0x01,0xFF,0xFC,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,
  173. 0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,
  174. 0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,0x03,0xC0,0x1E,0x00,0x03,0xFF,0xFC,0x00,
  175. 0x00,0xFF,0xF8,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  176. };

  177. unsigned char code Photo4[] =
  178. {
  179. /*--  数字4,宽度x高度=32x32  --*/
  180. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x3C,0x00,
  181. 0x00,0x00,0x7C,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xFC,0x00,0x00,0x03,0xFC,0x00,
  182. 0x00,0x07,0xBC,0x00,0x00,0x0F,0x3C,0x00,0x00,0x1E,0x3C,0x00,0x00,0x3C,0x3C,0x00,
  183. 0x00,0x78,0x3C,0x00,0x00,0xF0,0x3C,0x00,0x01,0xE0,0x3C,0x00,0x03,0xC0,0x3C,0x00,
  184. 0x07,0x80,0x3C,0x00,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0xC0,
  185. 0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,
  186. 0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,
  187. 0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  188. };
  189. unsigned char  code Photo5[]=
  190. {
  191. /*--  数字5,宽度x高度=32x32  --*/
  192. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,
  193. 0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,
  194. 0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,
  195. 0x01,0xE0,0x00,0x00,0x01,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0xC0,
  196. 0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,
  197. 0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,
  198. 0x00,0x00,0x07,0xC0,0x01,0xE0,0x07,0xC0,0x01,0xE0,0x07,0xC0,0x00,0xFF,0xFF,0xC0,
  199. 0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  200. };
  201. unsigned char code Photo6[]=
  202. {
  203. /*--  数字6,宽度x高度=32x32  --*/
  204. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x03,0xE0,0x00,
  205. 0x00,0x0F,0xE0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xF0,0x00,0x00,
  206. 0x01,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,
  207. 0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0xFF,0xF8,0x00,0x07,0xFF,0xFE,0x00,
  208. 0x07,0xFF,0xFE,0x00,0x07,0xC0,0x1F,0x00,0x07,0xC0,0x1F,0x00,0x07,0xC0,0x1F,0x00,
  209. 0x07,0xC0,0x1F,0x00,0x07,0xC0,0x1F,0x00,0x07,0xC0,0x1F,0x00,0x07,0xC0,0x1F,0x00,
  210. 0x07,0xC0,0x1F,0x00,0x07,0xC0,0x1F,0x00,0x03,0xFF,0xFE,0x00,0x03,0xFF,0xFE,0x00,
  211. 0x00,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  212. };
  213. unsigned char code Photo7[]=
  214. {
  215. /*--  数字7,宽度x高度=32x32  --*/
  216. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xC0,
  217. 0x01,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0xC0,0x01,0xC0,0x03,0xC0,0x01,0xC0,0x03,0xC0,
  218. 0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x3E,0x00,0x00,0x00,0x7C,0x00,
  219. 0x00,0x01,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xC0,0x00,
  220. 0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,
  221. 0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,
  222. 0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,
  223. 0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  224. };
  225. unsigned char code Photo8[]=
  226. {
  227. /*--  数字8,宽度x高度=32x32  --*/
  228. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFF,0x00,
  229. 0x01,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,
  230. 0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,
  231. 0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x01,0xFF,0xFF,0x80,
  232. 0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x80,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,
  233. 0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,
  234. 0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x01,0xFF,0xFF,0x80,
  235. 0x00,0xFF,0xFF,0x00,0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  236. };
  237. unsigned char code Photo9[]=
  238. {
  239. /*--  数字9,宽度x高度=32x32  --*/
  240. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFC,0x00,0x00,0x7F,0xFF,0x00,
  241. 0x00,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0xC0,0x01,0xE0,0x07,0xC0,0x01,0xE0,0x07,0xC0,
  242. 0x01,0xE0,0x07,0xC0,0x01,0xE0,0x07,0xC0,0x01,0xE0,0x07,0xC0,0x01,0xE0,0x07,0xC0,
  243. 0x01,0xE0,0x07,0xC0,0x01,0xE0,0x07,0xC0,0x01,0xFF,0xFF,0xC0,0x00,0xFF,0xFF,0xC0,
  244. 0x00,0xFF,0xFF,0xC0,0x00,0x3F,0xFF,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,
  245. 0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,
  246. 0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x3F,0xFF,0x80,0x00,0x3F,0xFF,0x00,
  247. 0x00,0x3F,0xFE,0x00,0x00,0x0F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  248. };
  249. unsigned char code Photo10[]=
  250. {
  251. /*--  车,宽度x高度=128x32  --*/
  252. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x10,0x00,0x00,
  253. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x80,0x00,0x20,0x00,0x03,
  254. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x80,0x00,0x40,0x00,0x04,
  255. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x80,0x00,0x80,0x00,0x08,
  256. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x80,0x01,0x00,0x00,0x10,
  257. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x02,0x00,0x00,0x60,
  258. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xFF,0xFF,0xFF,0xFF,0xC0,
  259. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x02,0x00,0x00,0x40,
  260. 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0x02,0x00,0x00,0x40,
  261. 0x00,0x00,0x00,0x00,0x2C,0x00,0x00,0x00,0x00,0x03,0xFF,0x80,0x02,0x00,0x00,0x40,
  262. 0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x40,
  263. 0x00,0x00,0x00,0x03,0x04,0x20,0x00,0x00,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x41,
  264. 0x00,0x00,0x00,0x06,0xA4,0x60,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x42,
  265. 0x00,0x00,0x00,0x0D,0x12,0x60,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x44,
  266. 0x00,0x00,0x00,0x11,0x21,0xE0,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x60,0x00,0x48,
  267. 0x00,0x00,0x00,0x21,0xC3,0xF7,0xF0,0x00,0x00,0x00,0x00,0x87,0xC0,0x60,0x7E,0x50,
  268. 0x00,0x07,0xFF,0xC1,0x77,0x01,0xF8,0x00,0x00,0x00,0x00,0x8F,0xC0,0xF0,0x63,0x60,
  269. 0x00,0x0F,0xEB,0x01,0x04,0x00,0x0C,0x00,0x00,0x00,0x00,0x98,0x01,0x98,0x63,0x40,
  270. 0x00,0x18,0x00,0x08,0x04,0x00,0x06,0x00,0x00,0x00,0x00,0x98,0x01,0x98,0x63,0x40,
  271. 0x00,0x30,0x00,0x08,0x04,0x00,0x01,0x00,0x00,0x00,0x00,0x98,0x03,0x0C,0x7F,0x40,
  272. 0x00,0x20,0x00,0x08,0x74,0x00,0x01,0x0F,0x3C,0xF3,0xC0,0x98,0x03,0xFC,0x7E,0x40,
  273. 0x00,0x40,0x00,0x08,0x04,0x00,0x01,0x09,0x24,0x92,0x40,0x98,0x07,0xFE,0x78,0x40,
  274. 0x00,0x84,0x00,0x08,0x00,0x00,0x01,0x09,0x24,0x92,0x40,0x98,0x06,0x06,0x6C,0x40,
  275. 0x01,0x8A,0x18,0x08,0x00,0x0C,0x07,0x39,0xE7,0x9E,0x60,0x8F,0xCC,0x03,0x66,0x40,
  276. 0x01,0x84,0x24,0x00,0x00,0x12,0x04,0x00,0x00,0x00,0x00,0x87,0xCC,0x03,0x63,0x40,
  277. 0x00,0x80,0x42,0x00,0x00,0x21,0x58,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x40,
  278. 0x00,0x7F,0x99,0xF0,0xFF,0xCC,0xC0,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x40,
  279. 0x00,0x1F,0x99,0xFF,0xFF,0xCC,0x80,0x00,0x00,0x00,0x07,0x80,0x02,0x00,0x00,0x40,
  280. 0x00,0x00,0x42,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x0F,0x80,0x02,0x00,0x00,0x40,
  281. 0x00,0x00,0x24,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x1F,0x80,0x02,0x00,0x00,0x40,
  282. 0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x3F,0x80,0x02,0x00,0x00,0x40,
  283. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x02,0x00,0x00,0x40,
  284. };
  285. unsigned char code Photo11[]=
  286. {
  287. /*单位cm,32*32*/
  288. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  289. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  290. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  291. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  292. 0x0F,0xF0,0x3C,0xF0,0x1F,0xF8,0x7F,0xF8,0x38,0x38,0xE7,0x9C,0x70,0x00,0xC3,0x0C,
  293. 0x60,0x00,0xC3,0x0C,0x60,0x00,0xC3,0x0C,0x60,0x00,0xC3,0x0C,0x70,0x00,0xC3,0x0C,
  294. 0x38,0x38,0xC3,0x0C,0x1F,0xF8,0xC3,0x0C,0x0F,0xF0,0xC3,0x0C,0x00,0x00,0x00,0x00,
  295. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  296. };

  297. /**********************************************************

  298. us延时子函数   (4.34us)

  299. **********************************************************/
  300. void delayNOP()
  301. {
  302.   _nop_();
  303.   _nop_();
  304.   _nop_();
  305.   _nop_();
  306. }

  307. /**********************************************************

  308. ms延时子函数

  309. ***********************************************************/
  310. void delayms(unsigned int ms)
  311. {
  312.   unsigned char y;
  313.   while (ms--)
  314.   {
  315.     for (y = 0; y < 114; y++)
  316.       ;
  317.   }
  318. }

  319. /**********************************************************

  320. 检查LCD忙状态
  321. lcd_busy为1时,忙,等待。
  322. lcd-busy为0时,闲,可写指令与数据。

  323. **********************************************************/
  324. bit lcd_busy()
  325. {
  326.   bit result;
  327.   LCD_RS = 0;
  328.   LCD_RW = 1;
  329.   LCD_EN = 1;
  330.   delayNOP();
  331.   result = (bit)(P0 &0x80);
  332.   LCD_EN = 0;
  333.   return (result);
  334. }

  335. /**********************************************************

  336. 写指令数据到LCD
  337. RS=L,RW=L,E=高脉冲,D0-D7=指令码。

  338. **********************************************************/
  339. void lcd_wcmd(unsigned char cmd)
  340. {
  341.   while (lcd_busy())
  342.     ;
  343.   LCD_RS = 0;
  344.   LCD_RW = 0;
  345.   LCD_EN = 1;
  346.   P0 = cmd;
  347.   delayNOP();
  348.   LCD_EN = 0;
  349. }

  350. /**********************************************************

  351. 写显示数据到LCD
  352. RS=H,RW=L,E=高脉冲,D0-D7=数据。

  353. **********************************************************/
  354. void lcd_wdat(unsigned char dat)
  355. {
  356.   while (lcd_busy())
  357.     ;
  358.   LCD_RS = 1;
  359.   LCD_RW = 0;
  360.   LCD_EN = 1;
  361.   P0 = dat;
  362.   delayNOP();
  363.   LCD_EN = 0;
  364. }

  365. /**********************************************************

  366. LCD初始化设定

  367. **********************************************************/
  368. void lcd_init()
  369. {
  370.   LCD_PSB = 1; //并口方式
  371.   delayms(5);
  372.   lcd_wcmd(0x34); //扩充指令操作
  373.   delayms(5);
  374.   lcd_wcmd(0x30); //基本指令操作
  375.   delayms(5);
  376.   lcd_wcmd(0x0C); //显示开,关光标
  377.   delayms(5);
  378.   lcd_wcmd(0x06); //光标的移动方向
  379.   delayms(5);
  380.   lcd_wcmd(0x01); //清除LCD的显示内容
  381.   delayms(5);
  382. }
  383. /****指定要显示字符的坐标********/
  384. void gotoxy(unsigned char y, unsigned char x)
  385. {
  386.         if(y==1)
  387.                 lcd_wcmd(0x80|x);
  388.         if(y==2)
  389.         lcd_wcmd(0x90|x);
  390.         if(y==3)
  391.         lcd_wcmd((0x80|x)+8);
  392.         if(y==4)
  393.         lcd_wcmd((0x90|x)+8);
  394. }

  395. /*****液晶显示字符串程序******/
  396. void print(uchar *str)
  397. {
  398.         while(*str!='\0')
  399.         {
  400.                 lcd_wdat(*str);
  401.                 str++;
  402.         }
  403. }


  404. /*****填充液晶DDRAM全为空格******/
  405. void clrram_lcd (void)
  406. {
  407.         lcd_wcmd(0x30);
  408.         lcd_wcmd(0x01);
  409. }
  410. /********设定图片显示位置子函数********************************/
  411. void lcd_pos(unsigned char X, unsigned char Y)
  412. {
  413.   unsigned char pos;

  414.   if (X == 1)
  415.   {
  416.     X = 0x80;
  417.   }
  418.   else if (X == 2)
  419.   {
  420.     X = 0x90;
  421.   }
  422.   else if (X == 3)
  423.   {
  424.     X = 0x88;
  425.   }
  426.   else if (X == 4)
  427.   {
  428.     X = 0x98;
  429.   }
  430.   pos = X + Y; //确定显示地址

  431.   lcd_wcmd(pos); //写显示地址
  432. }

  433. /******清屏子函数**************/
  434. void clr_screen()
  435. {
  436.   lcd_wcmd(0x30); //基本指令操作
  437.   delayms(5);
  438.   lcd_wcmd(0x01); //清屏
  439.   delayms(5);
  440. }

  441. /***********写字符串子函数**************/
  442. void wr_string(unsigned char str[])
  443. {
  444.   unsigned char num = 0;

  445.   while (str[num])
  446.   {
  447.     lcd_wdat(str[num++]); //写数据
  448.   }
  449. }
  450. /****32*32图形显示子函数-上半屏四块***********/
  451. void photodisplay(unsigned char *amp)       
  452. {
  453.   unsigned char i, j;
  454.   if(off==0)
  455.   {
  456.   lcd_wcmd(0x34); //写数据时,关闭图形显示
  457.    }
  458. switch(address)
  459. {
  460.         case 0:site=0x80;break;
  461.         case 1:site=0x82;break;
  462.         case 2:site=0x84;break;
  463.         case 3:site=0x86;break;
  464.         default: break;
  465. }
  466.   for (i = 0; i < 32; i++)
  467.   //32行(上半屏)
  468.   {       
  469.     lcd_wcmd(0x80 + i); //先写入Y坐标值
  470.     lcd_wcmd(site); //写入X坐标值
  471.     for (j = 0; j < 4; j++)
  472.     //4*8列
  473.       lcd_wdat(*amp++);
  474.     delayms(1);
  475.   }

  476.   if(off==1)
  477.   lcd_wcmd(0x36); //写完数据,开图形显示
  478. }
  479. /*******128*32图形显示子函数-下半屏一块************/
  480. void phot4display(unsigned char *bmp)
  481. {
  482.   unsigned char i, j;

  483.   for (i = 0; i < 32; i++)
  484.   //32行(下半屏)
  485.   {       
  486.     lcd_wcmd(0x80 + i); //先写入Y坐标值
  487.     lcd_wcmd(0x88); //写入X坐标值
  488.     for (j = 0; j < 16; j++)
  489.     //16*8列
  490.       lcd_wdat(*bmp++);
  491.     delayms(1);
  492.   }
  493.   lcd_wcmd(0x36); //写完数据,开图形显示
  494. }

  495. /***********主函数**************/
  496. void main()
  497. {
  498.           TMOD=0x12;               //定时器控制状态,定时器0只要TR0,1置1时,定时器选通。定时器1在INT0或1为高电平且TR0或1 为1时,被选通,工作方式为0,13位计数器
  499.         CP_RL2=0;               //捕获/重装载标志,选择重装载功能
  500.         RCLK=0;                //接收时钟标志,定时器1溢出脉冲做接收时钟
  501.         TCLK=0;                //发送时钟标志,定时器1溢出脉冲做发送脉冲
  502.         RCAP2H=(65536-30000)/256;
  503.         RCAP2L=(65536-30000)%256;        //预定义重装载值,        CP_RL2=0把预定义的数据自动装入TH2 TL2
  504.         ET2=1;             //定时器2中断运行
  505.         TR2=1;            //定时器2运行控制,启动定时器
  506.         TH0=256-12;
  507.         TL0=256-12;      //定时器0取时间12微秒,因为外部中断引脚每个机器周期被采样一次,为确保采样,由引脚INT0输入的信号
  508.                      //应至少保持一个机器周期,即12个振荡周期。
  509.         TH1=0;
  510.         TL1=0;              //定时器1初始化
  511.         ET0=1;              //运行定时器0中断
  512.     ET1=1;             //允许定时器1中断
  513.         TR1=1;            //启动定时器1
  514.         IT0=0;            //外部中断0类型控制位,低电平触发
  515.         IP=0x01;         //外部中断0的优先级最高
  516.         EA=1;           //总中断允许,每个中断源由各自的允许位确定
  517.     initDS1302();                        //初始化DS1302
  518.     lcd_init();                     //初始化LCD
  519.         P1_0=0;
  520.         times=10;              // 初始化
  521.     off=0;                                           //关显示图片标志位
  522.         Temp_mark=0;                        //温度标志位
  523.         change=0;                                 //切换标志
  524.         wave=0;                                        //切换键标志位
  525.         led=1;
  526.         timer=1;
  527.         m=ho=d=1;
  528.         mo=w=y=1;                    //分,时,日,月,年,星期标志位
  529.     delayms(50);                           //上电,等待稳定
  530.     clrram_lcd();
  531.     gotoxy(1,0);
  532.         print("汽车倒车雷达");  //第一行显示汽车倒车雷达
  533.         gotoxy(3,2);
  534.         print("毕业设计!!") ;
  535.         off=1;                                           //开显示图片标志位
  536.     delayms(3000);           //停留3000ms
  537.         off=0;                            //关显示图片标志位
  538.     clr_screen();                  //清屏
  539.         delayms(500);                        //停留500ms
  540.         assist_display();                //辅助显示时钟和温度字体和图形
  541.   while (1)
  542.   {       
  543.           buzzer=0;
  544.           led=1;
  545.     ultrasonic_key();        //切换键
  546.           if(change==0)
  547.           {

  548.                   DS1302_key();                   //设置键
  549.                 DS1302_add();                   //加键
  550.                 DS1302_reduce();           //减键
  551.                 read_t();                         //读取温度
  552.                 if(timer==1)
  553.                 {       
  554.                 timer=0;
  555.                  DS1302_time();                        //读时钟
  556.             DS1302_display();                                //显示时钟
  557.                 DS18B20_display();
  558.                 Temp_mark=~Temp_mark;
  559.                 buzzer=1;
  560.                
  561.                 }
  562.            }
  563.            else
  564.            {
  565.              if(open==1)
  566.              {
  567.               open=0;
  568.               EA=0;
  569.               S=TH1*256+TL1;
  570.               L=(uint)(S/58);//为什么除以58等于厘米, Y米=(X秒*344)/2
  571.                  // X秒=( 2*Y米)/344 -> X秒=0.0058*Y米 -> 厘米=微秒/58

  572.                   ultrasonic_display();
  573.                   delayms(10);
  574.                   alerting();
  575.               EA=1;       
  576.               TR1=1;
  577.                   TH1=0;
  578.           TL1=0;
  579.     }

  580.            }
  581.           
  582.   }
  583. }
  584. /***************************************************

  585.                DS1302程序

  586. ***************************************************/
  587. /*DS1302写一个字节*/
  588. void  DS1302write_byte(uchar data_a)
  589. {
  590.   uchar i;
  591.   for(i=8;i>0;i--)
  592.   {
  593.    dio=(bit)(data_a&0x01);
  594.    sclk=0;
  595.    data_a>>=1;
  596.    sclk=1;
  597.   }
  598. }
  599. /*DS1302读一个字节*/
  600. uchar DS1302read_byte(void)
  601. {
  602.    uchar i;
  603.    uchar data_b=0;
  604.    for(i=8;i>0;i--)
  605.    {
  606.    sclk=1;
  607.    ACC>>=1;
  608.    sclk=0;
  609.    acc_7=dio;
  610.    }
  611.    data_b=ACC;
  612.    return data_b;
  613. }
  614. /*写DS1302寄存器*/
  615. void writeDS1302(uchar addr,uchar da)
  616. {
  617.   rst=0;
  618.   sclk=0;
  619.   rst=1;
  620.   DS1302write_byte(addr);
  621.   DS1302write_byte(da);
  622.   sclk=1;
  623.   rst=0;
  624. }
  625. /*读DS1302寄存器内容*/
  626. uchar readDS1302(uchar addr)
  627. {
  628.   uchar ucdata;
  629.   rst=0;
  630.   sclk=0;
  631.   rst=1;
  632.   DS1302write_byte(addr|0x01);
  633.   ucdata=DS1302read_byte();
  634.   sclk=1;
  635.   rst=0;
  636.   return ucdata;
  637. }
  638. /*DS1302初始化*/
  639. void initDS1302(void)
  640. {
  641.   unsigned char flag;
  642.   flag= readDS1302(0x81);
  643.   if(flag&0x80)
  644. writeDS1302(write_wp,0x00);          //禁止写保护
  645. writeDS1302(write_sec,0x50);          //秒位初始化,50秒
  646. writeDS1302(write_min,0x35);          //分钟初始化,35分
  647. writeDS1302(write_hour,0x09);          //小时初始化,9点
  648. writeDS1302(write_day,0x23);          //日初始化,23日
  649. writeDS1302(write_mon,0x05);          //日初始化,5月
  650. writeDS1302(write_year,0x12);           //看初始化  2012年
  651. writeDS1302(write_week,0x03);           //日初始化,星期三
  652. writeDS1302(write_wp,0x80);          //允许写保护
  653. }
  654. /*读取时间日期*/
  655. void DS1302_time()
  656. {
  657.   sec=readDS1302(read_sec);                   //读秒
  658.   min=readDS1302(read_min);                   //读分钟
  659.   hour=readDS1302(read_hour);           //读小时
  660.   day=readDS1302(read_day);                   //读日
  661.   mon=readDS1302(read_mon);                   //读月
  662.   week=readDS1302(read_week);           //读星期
  663.   year=readDS1302(read_year);                //读年
  664. }
  665. /********************************

  666.         DS1302时钟显示程序

  667. *********************************/
  668. void DS1302_display()
  669. {
  670.   uchar second_a,minute_a,minute_b;
  671.   uchar hour_a,hour_b,day_a,day_b,mon_a,mon_b;
  672.   uchar year_a,year_b,week_a,am,pm;
  673.         second_a=sec&0x0f;
  674.         if(y==1)
  675.         {
  676.         year_a=year>>4;
  677.         year_b=year&0x0f;
  678.         }
  679.         else
  680.         {
  681.          year_a=year_b=10;
  682.         }
  683.                 if(mo==1)
  684.                 {
  685.                 mon_a=(mon>>4)&0x01;
  686.                 mon_b=mon&0x0f;
  687.                 }
  688.                 else
  689.                 {
  690.                  mon_a=mon_b=10;
  691.                 }
  692.        
  693.                         if(d==1)
  694.                         {
  695.                         day_a=day>>4;
  696.                         day_b=day&0x0f;
  697.                         }
  698.                         else
  699.                         {
  700.                          day_a=day_b=10;
  701.                         }
  702.                                  if(ho==1)
  703.                                 {
  704.                                 hour_a=(hour>>4)&0x03;
  705.                                 hour_b=hour&0x0f;
  706.                                 }
  707.                                 else
  708.                                 {
  709.                                 hour_a=hour_b=10;
  710.                                 }
  711.                                         if(m==1)
  712.                                         {
  713.                                         minute_a=min>>4;
  714.                                         minute_b=min&0x0f;
  715.                                         }
  716.                                         else
  717.                                         {
  718.                                         minute_a=minute_b=10;
  719.                                         }
  720.          if(hour<0x12)
  721.          {
  722.            am=0;
  723.            pm=1;
  724.          }
  725.           else
  726.           {
  727.            am=2;
  728.            pm=1;
  729.           }
  730.         if(w==1)
  731.         {
  732.         week_a=week;
  733.         }
  734.         else
  735.         {
  736.          week_a=0x08;
  737.         }
  738.         lcd_pos(1,4);
  739.         lcd_wdat(DIS1[year_a]);
  740.         lcd_wdat(DIS1[year_b]);
  741.         lcd_pos(1,5);
  742.         lcd_wdat('-');
  743.         lcd_wdat(DIS1[mon_a]);
  744.         lcd_pos(1,6);
  745.         lcd_wdat(DIS1[mon_b]);
  746.         lcd_wdat('-');
  747.         lcd_pos(1,7);
  748.         lcd_wdat(DIS1[day_a]);
  749.         lcd_wdat(DIS1[day_b]);
  750.         lcd_pos(2,1);
  751.         lcd_wdat(DIS4[am]);
  752.         lcd_wdat(DIS4[pm]);
  753.         lcd_pos(2,3);
  754.         lcd_wdat(DIS1[hour_a]);
  755.         lcd_wdat(DIS1[hour_b]);
  756.         lcd_pos(2,4);
  757.         lcd_wdat(DIS3[second_a]);
  758.         lcd_wdat(DIS1[minute_a]);
  759.         lcd_pos(2,5);
  760.         lcd_wdat(DIS1[minute_b]);
  761.         lcd_pos(3,3);
  762.         switch (week_a)
  763.         {
  764.                 case 0x07: wr_string(DIS12);
  765.                                    lcd_pos(3,6);
  766.                                    lcd_wdat(0x20);
  767.                                    lcd_wdat(0x20);
  768.                                    break;
  769.                 case 0x01: wr_string(DIS6); break;
  770.                 case 0x02: wr_string(DIS7); break;
  771.                 case 0x03: wr_string(DIS8); break;
  772.                 case 0x04: wr_string(DIS9);
  773.                                    lcd_pos(3,7);
  774.                                    lcd_wdat(0x20); break;
  775.                 case 0x05: wr_string(DIS10);
  776.                                    lcd_pos(3,6);
  777.                                    lcd_wdat(0x20);
  778.                                    lcd_wdat(0x20);break;
  779.                 case 0x06: wr_string(DIS11); break;
  780.                 case 0x08: wr_string(DIS15);break;
  781.                 default:break;
  782.         }
  783. }
  784. /********************************

  785.         DS1302时钟辅助显示程序

  786. *********************************/
  787. void assist_display(void)
  788. {
  789.         lcd_pos(1,0);                        //写date地址
  790.     wr_string(DIS2);                //写date字体数据
  791.         lcd_pos(1,3);                        //写年20地址
  792.         lcd_wdat(DIS1[2]);               
  793.         lcd_wdat(DIS1[0]);                //写年20数据
  794.         lcd_pos(2,0);                        //左三角形地址
  795.         lcd_wdat(0x10);                        //显示左三角形
  796.         lcd_pos(2,7);                         //右三角形地址
  797.         lcd_wdat(0x11);                         //显示右三角形
  798.         lcd_pos(3,0);                        //写week地址
  799.     wr_string(DIS5);                //写week数据
  800.         lcd_pos(4,0);                         //写<T>:地址
  801.     wr_string(DIS13);                //写<T>:字体数据
  802.         lcd_pos(4,3);                        //写车外温度单位地址
  803.         lcd_wdat(0xa1);                       
  804.         lcd_wdat(0xe6);                        //写车外温度单位

  805. }
  806. /*DS1302设置键程序*/
  807. void DS1302_key(void)
  808. {
  809.         if(key0==0)
  810.         {
  811.          set=1;
  812.         }
  813.           if((set&&key0)==1)
  814.           {
  815.                    buzzer=0;
  816.                  set=0;
  817.                  install++;
  818.                    if(install>=7)
  819.                    {
  820.                     install=0;
  821.                         m=ho=d=mo=w=y=1;
  822.                    }
  823.           }
  824.              switch(install)
  825.                  {
  826.                          case 0:m=ho=d=mo=w=y=1;break;
  827.                         case 1:m=~m;ho=d=mo=w=y=1;break;
  828.                         case 2:ho=~ho;m=d=mo=w=y=1;break;
  829.                         case 3:d=~d;m=ho=mo=w=y=1;break;
  830.                         case 4:mo=~mo;m=ho=d=w=y=1;break;
  831.                         case 5:y=~y;m=ho=d=mo=w=1;break;
  832.                         case 6:w=~w;m=ho=d=mo=y=1;break;
  833.                         default:break;
  834.                  }
  835.                           
  836. }
  837. /*DS1302加键程序*/
  838. void DS1302_add(void)
  839. {
  840.         if(key1==0)
  841.         {
  842.          ja=1;
  843.         }
  844.                 if(ja&&key1)
  845.                 {
  846.                    ja=0;
  847.                    if(install==1)
  848.                    {
  849.                            buzzer=0;       
  850.                      min++;
  851.                         if((min&0x0f)==0x0a)
  852.                           {
  853.                            min=(min&0x70)+0x10;
  854.                              if((min&0x70)==0x60)
  855.                                            {
  856.                                            min=0x00;
  857.                                            }
  858.                           }
  859.                             writeDS1302(write_wp,0x00);          //禁止写保护
  860.                                 writeDS1302(write_min,min);          //修改分钟时间
  861.                                 writeDS1302(write_wp,0x80);          //允许写保护
  862.                    }
  863.                    else if(install==2)
  864.                    {
  865.                      buzzer=0;
  866.                      hour++;
  867.                          if(hour!=0x24)
  868.                          {
  869.                            if((hour&0x0f)==0x0a)
  870.                            {
  871.                            hour=(hour&0x30)+0x10;
  872.                            }
  873.                          }
  874.                           else
  875.                           {
  876.                                  hour=hour&0x00;                          
  877.                           }
  878.                             writeDS1302(write_wp,0x00);          //禁止写保护
  879.                                 writeDS1302(write_hour,hour); // 修改小时时间
  880.                                 writeDS1302(write_wp,0x80);          //允许写保护
  881.                    }
  882.                    else if(install==3)
  883.                    {
  884.                      buzzer=0;
  885.                      day++;
  886.                          if(day!=0x32)
  887.                          {
  888.                                  if((day&0x0f)==0x0a)
  889.                                  {
  890.                                    day=(day&0x30)+0x10;
  891.                                  }
  892.                           }
  893.                           else
  894.                           {
  895.                            day=0x01;
  896.                           }
  897.                             writeDS1302(write_wp,0x00);          //禁止写保护
  898.                                 writeDS1302(write_day,day); // 修改日期
  899.                                 writeDS1302(write_wp,0x80);          //允许写保护
  900.                    }
  901.                    else if(install==4)
  902.                    {
  903.                      buzzer=0;
  904.                      mon++;
  905.                          if(mon!=0x13)
  906.                           {
  907.                                   if((mon&0x0f)==0x0a)
  908.                                   {
  909.                                    mon=0x10;
  910.                                   }
  911.                           }
  912.                           else
  913.                           {
  914.                            mon=0x01;
  915.                           }
  916.                             writeDS1302(write_wp,0x00);          //禁止写保护
  917.                                 writeDS1302(write_mon,mon); // 修改月期
  918.                                 writeDS1302(write_wp,0x80);          //允许写保护
  919.                    }
  920.                    else if(install==5)
  921.            {
  922.                         buzzer=0;
  923.                               year++;
  924.                                  if((year&0x0f)==0x0a)
  925.                                  {
  926.                                   year=(year&0xf0)+0x10;
  927.                                    if((year&0xf0)==0xa0)
  928.                                    {
  929.                                     year=0x00;
  930.                                    }
  931.                                  }
  932.                             writeDS1302(write_wp,0x00);          //禁止写保护
  933.                                 writeDS1302(write_year,year); // 修改年
  934.                                 writeDS1302(write_wp,0x80);          //允许写保护        
  935.                    }
  936.                    else if(install==6)
  937.                    {
  938.                         buzzer=0;
  939.                             week++;
  940.                                 if(week==0x08)
  941.                                 {
  942.                                  week=0x01;
  943.                                 }
  944.                             writeDS1302(write_wp,0x00);          //禁止写保护
  945.                                 writeDS1302(write_week,week); // 修改星期
  946.                                 writeDS1302(write_wp,0x80);          //允许写保护
  947.                    }
  948.                 }
  949.                                          
  950. }
  951. /*DS1302减键程序*/
  952. void DS1302_reduce(void)
  953. {
  954.         if(key2==0)
  955.         {
  956.          jian=1;
  957.         }
  958.                 if(jian&&key2)
  959.                 {
  960.                    jian=0;
  961.                    if(install==1)
  962.                    {
  963.                      buzzer=0;
  964.                      min--;
  965.                         if((min&0x0f)==0x0f)
  966.                           {
  967.                                     min=min&0x79;
  968.                              if(min==0x79)
  969.                                     {
  970.                                      min=0x59;
  971.                                     }
  972.                           }
  973.                             writeDS1302(write_wp,0x00);          //禁止写保护
  974.                                 writeDS1302(write_min,min);          //分钟初始化,59分
  975.                                 writeDS1302(write_wp,0x80);          //允许写保护
  976.                    }
  977.                    else if(install==2)
  978.                    {
  979.                      buzzer=0;
  980.                             hour--;
  981.                          if((hour&0x0f)==0x0f)
  982.                           {
  983.                             hour=hour&0x39;
  984.                                 if(hour==0x39)
  985.                                  {
  986.                                   hour=0x23;
  987.                                  }
  988.                           }
  989.                             writeDS1302(write_wp,0x00);          //禁止写保护
  990.                                 writeDS1302(write_hour,hour); // 修改小时时间
  991.                                 writeDS1302(write_wp,0x80);          //允许写保护
  992.                    }
  993.                    else if(install==3)
  994.                    {
  995.                      buzzer=0;
  996.                          day--;
  997.                  if(day!=0x00)
  998.                  {
  999.                          if((day&0x0f)==0x0f)
  1000.                          {
  1001.                           day=day&0x39;
  1002.                          }
  1003.                  }
  1004.                  else
  1005.                  {
  1006.                   day=0x31;
  1007.                  }
  1008.                             writeDS1302(write_wp,0x00);          //禁止写保护
  1009.                                 writeDS1302(write_day,day); // 修改日期
  1010.                                 writeDS1302(write_wp,0x80);          //允许写保护
  1011.                    }
  1012.                    else if(install==5)
  1013.                    {
  1014.                     buzzer=0;
  1015.                     year--;
  1016.                         if((year&0xf0)!=0xf0)
  1017.                         {
  1018.                          if((year&0x0f)==0x0f)
  1019.                          {
  1020.                           year=year&0xf9;
  1021.                          }
  1022.                         }
  1023.                         else
  1024.                         {
  1025.                          year=0x99;
  1026.                         }
  1027.                             writeDS1302(write_wp,0x00);          //禁止写保护
  1028.                                 writeDS1302(write_year,year); // 修改年
  1029.                                 writeDS1302(write_wp,0x80);          //允许写保护
  1030.                    }
  1031.                    else if(install==6)
  1032.                    {
  1033.                      buzzer=0;
  1034.                             week--;
  1035.                          if(week==0x00)
  1036.                          {
  1037.                           week=0x07;
  1038.                          }
  1039.                             writeDS1302(write_wp,0x00);          //禁止写保护
  1040.                                 writeDS1302(write_week,week); // 修改星期
  1041.                                 writeDS1302(write_wp,0x80);          //允许写保护
  1042.                    }
  1043.                 }
  1044.                    
  1045. }
  1046. /***************************************************

  1047.                DS18B20程序

  1048. ***************************************************/
  1049. /*DS18B20延时程序*/
  1050. void delay_18b20(uint n)
  1051. {
  1052.         while(n--);
  1053. }

  1054. /*复位程序*/
  1055. void init_18b20(void)
  1056. {        if(Temp_mark==0)
  1057.         DQ=1;                 //拉高总线
  1058.         delay_18b20(8);                 //延时一段时间
  1059.         DQ=0;                                 //拉低总线
  1060.         delay_18b20(80);         //延时大于480us
  1061.         DQ=1;                                 //拉高总线
  1062.         delay_18b20(14);         
  1063.         while(DQ!=1)                //稍做延时后,等待DS18B20应答
  1064.         delay_18b20(5);
  1065.        
  1066. }
  1067. /*写一个字节程序*/
  1068. void write_18b20(uchar data_a)
  1069. {
  1070.   uchar loop=0;
  1071.   for(loop=8;loop>0;loop--)
  1072.    {
  1073.    if(Temp_mark==0)
  1074.    DQ=1;
  1075.    _nop_();
  1076.    _nop_();
  1077.    DQ=0;                          // 拉低总线,一段时间
  1078.    _nop_();
  1079.    _nop_();
  1080.    _nop_();
  1081.    _nop_();
  1082.    _nop_();
  1083.    DQ=data_a&0x01;          //写一位
  1084.    delay_18b20(5);          //稍做延时
  1085.    DQ=1;                         //拉高总线
  1086.    data_a>>=1;                 //为下一位做准备
  1087.    }
  1088. }
  1089. /*读一个字节程序*/
  1090. uchar read_18b20()
  1091. {
  1092. uchar loop=0,data_b=0;
  1093. for(loop=8;loop>0;loop--)
  1094.     {
  1095.          if(Temp_mark==0)
  1096.          DQ=0;                          //拉低总线
  1097.          data_b>>=1;          //读取一位
  1098.           DQ=1;                         //拉高总线,为读取温度做准备
  1099.            if(DQ)                         //判断总线上是否读取1
  1100.            data_b|=0x80;  //是,送1
  1101.            delay_18b20(4);        //稍做延时

  1102.         }
  1103.         return data_b;
  1104. }
  1105. /*读温度程序*/
  1106. void  read_t(void)
  1107. {  
  1108.    uchar t_l=0;                                //清温度低位
  1109.    uchar t_h=0;                                //清温度高位
  1110.    init_18b20();                        //复位

  1111.    write_18b20(0xcc);                //跳过Rom
  1112.    write_18b20(0x44);                //温度转换

  1113.         delay_18b20(160);                //延时900us,等待温度转换

  1114.    init_18b20();                        //复位
  1115.    write_18b20(0xcc);                //跳过Rom
  1116.    write_18b20(0xbe);                //读暂存器温度

  1117.    t_l=read_18b20();                //读取温度低位
  1118.    t_h=read_18b20();                //读取温度高位

  1119.    t=t_h;                                       
  1120.    t<<=8;

  1121.    t|=t_l;                                        //将温度低位与高位合并
  1122.    dispose_t();                                //处理温度数据
  1123. }
  1124. /*处理温度*/
  1125. void dispose_t(void)
  1126. {         

  1127.     t=(t*0.0625);                          //得到正确温度值
  1128.     tt=(uchar)t;                         //取整数,舍去小数部分
  1129.     shi=tt%100/10;
  1130.     ge=tt%100%10;
  1131.            if(shi==0)                         //十位是否等于0
  1132.             shi=10;                                 //十位等于0,十位不显示
  1133.         if(Temp_mark==0)
  1134.         {
  1135.          shi0=shi;
  1136.          ge0=ge;
  1137.         }
  1138.         else
  1139.         {
  1140.          shi1=shi;
  1141.          ge1=ge;
  1142.         }
  1143. }
  1144. /*显示程序*/
  1145. void DS18B20_display()
  1146. {
  1147.         lcd_pos(4,2);                         //室内温度地址
  1148.         lcd_wdat(DIS1[shi0]);         //室内温度十位
  1149.         lcd_wdat(DIS1[ge0]);                 //室内温度个位

  1150. }
  1151. /*定时器2*/
  1152. void timer2(void) interrupt 5 using 1
  1153. {
  1154.         TF2=0;
  1155.         time++;
  1156.         if(time==11)
  1157.         {
  1158.          time=0;
  1159.          timer=1;
  1160.         }
  1161. ……………………

  1162. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
汽车倒车雷达源程序.zip (69.97 KB, 下载次数: 83)

评分

参与人数 2黑币 +8 收起 理由
﹌信念。 + 5 赞一个!
www123lhs + 3 赞一个!

查看全部评分

回复

使用道具 举报

ID:217754 发表于 2017-10-22 15:08 来自手机 | 显示全部楼层
这个真是头晕,希望有电路图看一下
回复

使用道具 举报

ID:217754 发表于 2017-10-13 20:41 | 显示全部楼层
我看到晕。做为新手的我。真的看不懂了。先留个印。慢慢研究。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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