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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

新人求教 單片機測速仿真不行 顯示000

[復制鏈接]
跳轉到指定樓層
樓主

  1. #include <reg52.h>                 
  2. #define uchar unsigned char         
  3. #define uint  unsigned int        
  4. sbit clk = P1^3;          //ds1302
  5. sbit io =  P1^4;         
  6. sbit rst = P1^5;         
  7.                                                 //秒  分   時   日   月  年   星期         
  8. uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};   //寫地址
  9. uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};   //讀地址
  10. uchar code init_ds[]  ={0x55,0x17,0x15,0x01,0x01,0x13,0x13};   
  11. uchar miao,fen,shi,ri,yue,week,nian;
  12. uchar i;

  13. uchar t1_num,t2_num;        //計時間中斷的次數
  14. unsigned long speed1,juli,time2;
  15. float f_hz        ,speed_km,speed_m;

  16. uchar TH11,TL11;
  17. uchar flag_en;   //開始計算速度使能
  18. uchar flag_stop_en;   //要確定車子是否停下了

  19. uint juli_s;             //每秒走的距離
  20. uint juli_z;         //總路程
  21. float zhijing = 0.15;  //直徑 0.55M
  22. uint s_zhijing = 15;

  23. bit flag_1s = 1;             //1s
  24. uchar menu_1;        //菜單設置變量
  25. uchar menu_2;        //菜單設置變量

  26. long zong_lc;        //總量程

  27. uchar flag_200ms;
  28. uint shudu;   //定義速度的變量
  29. uint bj_shudu = 40;         //報警速度


  30. //這三個引腳參考資料
  31. sbit rs=P1^0;         //LCD
  32. sbit rw=P1^1;
  33. sbit e =P1^2;         

  34. uchar code table_num[]="0123456789abcdefg";
  35. uchar i;

  36. sbit beep = P3^7;   //蜂鳴器IO口定義



  37. /******************1ms 延時函數*******************/
  38. void delay_1ms(uint q)
  39. {
  40.         uint i,j;
  41.         for(i=0;i<q;i++)
  42.                 for(j=0;j<120;j++);
  43. }


  44. /********************************************************************
  45. * 名稱 : delay_uint()
  46. * 功能 : 小延時。
  47. * 輸入 : 無
  48. * 輸出 : 無
  49. ***********************************************************************/
  50. void delay_uint(uint q)
  51. {
  52.         while(q--);
  53. }

  54. /********************************************************************
  55. * 名稱 : write_com(uchar com)
  56. * 功能 : 1602命令函數
  57. * 輸入 : 輸入的命令值
  58. * 輸出 : 無
  59. ***********************************************************************/
  60. void write_com(uchar com)
  61. {
  62.         i =0;
  63.         e=0;
  64.         rs=0;
  65.         rw=0;
  66.         P0=com;
  67.         delay_uint(3);
  68.         e=1;
  69.         delay_uint(25);
  70.         e=0;
  71. }

  72. /********************************************************************
  73. * 名稱 : write_data(uchar dat)
  74. * 功能 : 1602寫數據函數
  75. * 輸入 : 需要寫入1602的數據
  76. * 輸出 : 無
  77. ***********************************************************************/
  78. void write_data(uchar dat)
  79. {
  80.         i =0;
  81.         e=0;
  82.         rs=1;
  83.         rw=0;
  84.         P0=dat;
  85.         delay_uint(3);
  86.         e=1;
  87.         delay_uint(25);
  88.         e=0;        
  89. }

  90. /********************************************************************
  91. * 名稱 : write_sfm2(uchar hang,uchar add,uchar date)
  92. * 功能 : 顯示2位十進制數,如果要讓第一行,第五個字符開始顯示"23" ,調用該函數如下
  93.                   write_sfm1(1,5,23)
  94. * 輸入 : 行,列,需要輸入1602的數據
  95. * 輸出 : 無
  96. ***********************************************************************/
  97. void write_sfm2(uchar hang,uchar add,uint date)
  98. {
  99.         if(hang==1)   
  100.                 write_com(0x80+add);
  101.         else
  102.                 write_com(0x80+0x40+add);
  103.         write_data(0x30+date/10%10);
  104.         write_data(0x30+date%10);        
  105. }

  106. /********************************************************************
  107. * 名稱 : write_sfm4(uchar hang,uchar add,uchar date)
  108. * 功能 : 顯示2位十進制數,如果要讓第一行,第五個字符開始顯示"23" ,調用該函數如下
  109.                   write_sfm1(1,5,23)
  110. * 輸入 : 行,列,需要輸入1602的數據
  111. * 輸出 : 無
  112. ***********************************************************************/
  113. void write_sfm4(uchar hang,uchar add,uint date)
  114. {
  115.         if(hang==1)   
  116.                 write_com(0x80+add);
  117.         else
  118.                 write_com(0x80+0x40+add);
  119.         write_data(0x30+date/10000%10);
  120.         write_data(0x30+date/1000%10);
  121.         write_data(0x30+date/100%10);        
  122.         write_data(0x30+date/10%10);
  123.         write_data(0x30+date%10);        
  124.         write_data('k');        
  125.         write_data('m');        
  126. }

  127. void write_sfm7(uchar hang,uchar add,uint date)
  128. {
  129.         if(hang==1)   
  130.                 write_com(0x80+add);
  131.         else
  132.                 write_com(0x80+0x40+add);
  133.         write_data(0x30+date/100000%10);
  134.         write_data(0x30+date/100000%10);
  135.         write_data(0x30+date/10000%10);
  136.         write_data(0x30+date/1000%10);
  137.         write_data('.');        
  138.         write_data(0x30+date/100%10);        
  139.         write_data(0x30+date/10%10);
  140.         write_data('k');        
  141.         write_data('m');        
  142. }

  143. /***********************lcd1602上顯示兩位十進制數************************/
  144. void write_sfm1(uchar hang,uchar add,uchar date)
  145. {
  146.         if(hang==1)   
  147.                 write_com(0x80+add);
  148.         else
  149.                 write_com(0x80+0x40+add);
  150.         write_data(0x30+date % 10);        
  151. }


  152. /********************************************************************
  153. * 名稱 : write_string(uchar hang,uchar add,uchar *p)
  154. * 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調用該函數如下
  155.                   write_string(1,5,"ab cd ef;")
  156. * 輸入 : 行,列,需要輸入1602的數據
  157. * 輸出 : 無
  158. ***********************************************************************/
  159. void write_string(uchar hang,uchar add,uchar *p)
  160. {
  161.         if(hang==1)   
  162.                 write_com(0x80+add);
  163.         else
  164.                 write_com(0x80+0x40+add);
  165.                 while(1)
  166.                 {
  167.                         if(*p == '\0')  break;
  168.                         write_data(*p);
  169.                         p++;
  170.                 }        
  171. }


  172. /***********************lcd1602上顯示兩位十進制數************************/
  173. void write_sfm2_ds1302(uchar hang,uchar add,uchar date)
  174. {
  175.         if(hang==1)   
  176.                 write_com(0x80+add);
  177.         else
  178.                 write_com(0x80+0x40+add);
  179.         write_data(table_num[date / 16]);
  180.         write_data(table_num[date % 16]);        
  181. }

  182. /*****************控制光標函數********************/
  183. void write_guanbiao(uchar hang,uchar add,uchar date)
  184. {               
  185.         if(hang==1)   
  186.                 write_com(0x80+add);
  187.         else
  188.                 write_com(0x80+0x40+add);
  189.         if(date == 1)
  190.                 write_com(0x0f);     //顯示光標并且閃爍        
  191.         else
  192.                 write_com(0x0c);   //關閉光標
  193. }         



  194. /********************************************************************
  195. * 名稱 : init_1602()
  196. * 功能 : 初始化1602液晶
  197. * 輸入 : 無
  198. * 輸出 : 無
  199. ***********************************************************************/
  200. void init_1602()      //1602初始化
  201. {
  202.         write_com(0x38);
  203.         write_com(0x0c);
  204.         write_com(0x06);
  205.         delay_uint(1000);
  206.         write_string(1,0,"sd:00km/h  00:00");               
  207.         write_string(2,0,"lc:00.00km      ");        
  208. }

  209. /*************寫一個數據到對應的地址里***************/
  210. void write_ds1302(uchar add,uchar dat)
  211. {               
  212.         rst = 1;                         //把復位線拿高
  213.         for(i=0;i<8;i++)
  214.         {                                     //低位在前
  215.                 clk = 0;                 //時鐘線拿低開始寫數據
  216.                 io = add & 0x01;            
  217.                 add >>= 1;                 //把地址右移一位
  218.                 clk = 1;                 //時鐘線拿高
  219.         }        
  220.         for(i=0;i<8;i++)
  221.         {
  222.                 clk = 0;                 //時鐘線拿低開始寫數據
  223.                 io = dat & 0x01;
  224.                 dat >>= 1;                 //把數據右移一位
  225.                 clk = 1;                 //時鐘線拿高
  226.         }
  227.         rst = 0;                         //復位線合低
  228.         clk = 0;
  229.         io = 0;
  230. }

  231. /*************從對應的地址讀一個數據出來***************/
  232. uchar read_ds1302(uchar add)
  233. {
  234.         uchar value,i;
  235.         rst = 1;                         //把復位線拿高
  236.         for(i=0;i<8;i++)
  237.         {                                     //低位在前
  238.                 clk = 0;                 //時鐘線拿低開始寫數據
  239.                 io = add & 0x01;            
  240.                 add >>= 1;                 //把地址右移一位
  241.                 clk = 1;                 //時鐘線拿高
  242.         }               
  243.         for(i=0;i<8;i++)
  244.         {
  245.                 clk = 0;                 //時鐘線拿低開始讀數據
  246.                 value >>= 1;
  247.                 if(io == 1)
  248.                         value |= 0x80;
  249.                 clk = 1;                 //時鐘線拿高
  250.         }
  251.         rst = 0;                         //復位線合低
  252.         clk = 0;
  253.         io = 0;
  254.         return value;                 //返回讀出來的數據
  255. }



  256. /*************把要的時間 年月日 都讀出來***************/
  257. void read_time()
  258. {
  259.         miao = read_ds1302(read_add[0]);        //讀秒
  260.         fen  = read_ds1302(read_add[1]);        //讀分
  261.         shi  = read_ds1302(read_add[2]);        //讀時
  262.         ri   = read_ds1302(read_add[3]);        //讀日
  263.         yue  = read_ds1302(read_add[4]);        //讀月
  264.         nian = read_ds1302(read_add[5]);        //讀年
  265.         week = read_ds1302(read_add[6]);        //讀星期
  266. }

  267. /*************把要寫的時間 年月日 都寫入ds1302里***************/
  268. void write_time()
  269. {
  270.         write_ds1302(0x8e,0x00);                        //打開寫保護
  271.         write_ds1302(write_add[0],miao);        //寫秒
  272.         write_ds1302(write_add[1],fen);                //寫分
  273.         write_ds1302(write_add[2],shi);                //寫時
  274.         write_ds1302(write_add[3],ri);                //寫日
  275.         write_ds1302(write_add[4],yue);                //寫月
  276.         write_ds1302(write_add[5],nian);        //寫星期
  277.         write_ds1302(write_add[6],week);        //寫年
  278.         write_ds1302(0x8e,0x80);                        //關閉寫保護
  279. }

  280. /*************定時器0初始化程序***************/
  281. void init_1602_ds1302()
  282. {
  283.         write_sfm2_ds1302(1,11,shi);        
  284.         write_sfm2_ds1302(1,14,fen);        
  285. }

  286. /***********外部中斷0初始化程序****************/
  287. void init_int0()
  288. {
  289.         EX0=1;                          //允許外部中斷0中斷
  290.         EA=1;                           //開總中斷
  291.         IT0 = 1;                   //外部中斷0負跳變中斷
  292. }


  293. /*************定時器0初始化程序***************/
  294. void time_init()          //定時器0初始化程序
  295. {
  296.         EA   = 1;                   //開總中斷
  297.         TMOD = 0X11;          //定時器0、工作方式1
  298.         ET0  = 1;                  //開定時器0中斷
  299.         TR0  = 1;                  //允許定時器0定時
  300.         ET1  = 1;                  //開定時器1中斷
  301.         TR1  = 1;                  //允許定時器1定時
  302. }


  303. /***********計算速度函數**************/
  304. void menu_dis()          //計算速度函數
  305. {
  306.         static uchar value;
  307.         if(menu_1 == 0)
  308.         {        
  309.                 if(flag_1s == 1)   
  310.                 {        
  311.                         flag_1s = 0;                 
  312.                         if(flag_en == 0)
  313.                         {
  314.                                 value ++;
  315.                                 if(value >= 3)        //2秒
  316.                                 {        
  317.                                         speed_km = 0;  //速度為0
  318.                                         shudu = (uint)speed_km;        
  319.                                         value = 0;                                
  320.                                 }
  321.                         }
  322.                         if((flag_en == 1))
  323.                         {        
  324.                                 value = 0;               
  325.                                 flag_en = 0;         
  326.                                  //1s = 1 / 1000000us;          // 1m/s=0.001km除以1/3600h=3.6km/h                        
  327.                                 f_hz = 1/(t2_num * 65536.0 + TH11 * 256 + TL11) / 1000000 ;  //算出來就是秒
  328.                                 t2_num = 0;        //把變量清零
  329.                                 TH11 = 0;
  330.                                 TL11 = 0;                                          
  331.                                 speed_m = f_hz * zhijing * 3.14/4  ;        //算出來的是m/s
  332.                                 juli_z = (juli_z + (uint)speed_m) ;        //總路程m        
  333.                                 speed_km = speed_m * 3.6 ;        //(帶個小數點) km/s               
  334.                             shudu = (uint)speed_km;
  335.                                 zong_lc += speed_m;
  336.                         }               
  337.                         write_sfm2(1,3,shudu);               
  338.                         write_sfm4(2,3,juli_z);        

  339.                 }
  340.         }
  341. }

  342. /********************獨立按鍵程序*****************/
  343. uchar key_can;         //按鍵值

  344. void key()         //獨立按鍵程序
  345. {
  346.         static uchar key_new;
  347.         key_can = 20;                   //按鍵值還原
  348.         P3 |= 0x78;                     //對應的按鍵IO口輸出為1
  349.         if((P3 & 0x78) != 0x78)                //按鍵按下
  350.         {
  351.                 delay_1ms(1);                     //按鍵消抖動
  352.                 if(((P3 & 0x78) != 0x78) && (key_new == 1))
  353.                 {                                                //確認是按鍵按下
  354.                         key_new = 0;
  355.                         switch(P3 & 0x78)
  356.                         {
  357.                                 case 0x70:  key_can = 4;  break;         //得到按鍵值
  358.                                 case 0x68:  key_can = 3;  break;         //得到按鍵值
  359.                                 case 0x58:  key_can = 2;  break;         //得到按鍵值
  360.                                 case 0x38:  key_can = 1;  break;         //得到按鍵值
  361.                         }
  362.                 }                        
  363.         }
  364.         else
  365.                 key_new = 1;        
  366. }


  367. /**********************設置函數************************/
  368. void key_with()
  369. {
  370.         if(key_can == 1)        //設置鍵
  371.         {
  372.                 menu_1++;
  373.                 if(menu_1 == 1)          //設置時間
  374.                 {
  375.                         menu_2 = 1;
  376.                         write_string(1,0,"    :  :    W:  ");                        
  377.                         write_string(2,0," 20  -  -       ");        
  378.                 }
  379.                 if(menu_1 == 2)          //設置報警速度
  380.                 {
  381.                         menu_2 = 1;
  382.                         write_string(1,0,"set-sd:00km/h   ");                        
  383.                         write_string(2,0,"zlc:             ");        
  384.                 }
  385.                 if(menu_1 == 3)          //設置直徑
  386.                 {
  387.                         menu_2 = 1;
  388.                         write_string(1,0,"  Set Zhijing  ");                        
  389.                         write_string(2,0,"               ");        
  390.                 }
  391.                 menu_2 = 1;

  392.                 if(menu_1 > 2)    //回到正常顯示
  393.                 {
  394.                         menu_1 = 0;
  395.                         write_guanbiao(1,2,0);          //關閉光標
  396.                         init_1602();      //1602初始化     //初始化液晶顯示               
  397.                 }
  398.         }
  399.         if(key_can == 2)        //選擇鍵
  400.         {
  401.                 if(menu_1 == 1)                  //設置時間
  402.                 {
  403.                         menu_2 ++;
  404.                         if(menu_2 > 7)
  405.                                 menu_2 = 1;
  406.                 }
  407.                 if(menu_1 == 2)                 //設置
  408.                 {
  409.                         menu_2 ++;
  410.                         if(menu_2 > 2)
  411.                                 menu_2 = 1;                                
  412.                 }

  413.         }
  414.         if(menu_1 == 1)
  415.         {
  416.                 if(menu_2 == 1)                  //設置時
  417.                 {
  418.                         if(key_can == 3)        //加
  419.                         {
  420.                                 shi+=0x01;
  421.                                 if((shi & 0x0f) >= 0x0a)
  422.                                         shi = (shi & 0xf0) + 0x10;
  423.                                 if(shi >= 0x24)
  424.                                         shi = 0;
  425.                         }               
  426.                         if(key_can == 4)        //減
  427.                         {
  428.                                 if(shi == 0x00)
  429.                                         shi = 0x24;
  430.                                 if((shi & 0x0f) == 0x00)
  431.                                         shi = (shi | 0x0a) - 0x10;
  432.                                 shi -- ;
  433.                         }                                          
  434.                 }
  435.                 if(menu_2 == 2)                  //設置分
  436.                 {
  437.                         if(key_can == 3)        //加
  438.                         {
  439.                                 fen+=0x01;
  440.                                 if((fen & 0x0f) >= 0x0a)
  441.                                         fen = (fen & 0xf0) + 0x10;
  442.                                 if(fen >= 0x60)
  443.                                         fen = 0;
  444.                         }               
  445.                         if(key_can == 4)        //減         
  446.                         {
  447.                                 if(fen == 0x00)
  448.                                         fen = 0x5a;
  449.                                 if((fen & 0x0f) == 0x00)
  450.                                         fen = (fen | 0x0a) - 0x10;
  451.                                 fen -- ;
  452.                         }        
  453.                 }
  454.                 if(menu_2 == 3)                  //設置秒
  455.                 {
  456.                         if(key_can == 3)        //加
  457.                         {
  458.                                 miao+=0x01;
  459.                                 if((miao & 0x0f) >= 0x0a)
  460.                                         miao = (miao & 0xf0) + 0x10;
  461.                                 if(miao >= 0x60)
  462.                                         miao = 0;
  463.                         }        
  464.                         if(key_can == 4)        //減         
  465.                         {
  466.                                 if(miao == 0x00)
  467.                                         miao = 0x5a;
  468.                                 if((miao & 0x0f) == 0x00)
  469.                                         miao = (miao | 0x0a) - 0x10;
  470.                                 miao -- ;                        
  471.                         }
  472.                 }
  473.                 if(menu_2 == 4)                  //設置星期
  474.                 {
  475.                         if(key_can == 3)        //加
  476.                         {
  477.                             week+=0x01;
  478.                                 if((week & 0x0f) >= 0x0a)
  479.                                         week = (week & 0xf0) + 0x10;
  480.                                 if(week >= 0x08)
  481.                                         week = 1;
  482.                         }               
  483.                         if(key_can == 4)        //減         
  484.                         {
  485.                                 if(week == 0x01)
  486.                                         week = 0x08;
  487.                                 if((week & 0x0f) == 0x00)
  488.                                         week = (week | 0x0a) - 0x10;
  489.                                 week -- ;
  490.                         }        
  491.                 }
  492.                 if(menu_2 == 5)                  //設置年
  493.                 {
  494.                         if(key_can == 3)        //加
  495.                         {
  496.                             nian+=0x01;
  497.                                 if((nian & 0x0f) >= 0x0a)
  498.                                         nian = (nian & 0xf0) + 0x10;
  499.                                 if(nian >= 0x9a)
  500.                                         nian = 1;
  501.                         }               
  502.                         if(key_can == 4)        //減         
  503.                         {
  504.                                 if(nian == 0x01)
  505.                                         nian = 0x9a;
  506.                                 if((nian & 0x0f) == 0x00)
  507.                                         nian = (nian | 0x0a) - 0x10;
  508.                                 nian -- ;               
  509.                         }        
  510.                 }
  511.                 if(menu_2 == 6)                  //設置月
  512.                 {
  513.                         if(key_can == 3)        //加
  514.                         {
  515.                             yue+=0x01;
  516.                                 if((yue & 0x0f) >= 0x0a)
  517.                                         yue = (yue & 0xf0) + 0x10;
  518.                                 if(yue >= 0x13)
  519.                                         yue = 1;
  520.                         }               
  521.                         if(key_can == 4)        //減         
  522.                         {
  523.                                 if(yue == 0x01)
  524.                                         yue = 0x13;
  525.                                 if((yue & 0x0f) == 0x00)
  526.                                         yue = (yue | 0x0a) - 0x10;
  527.                                 yue -- ;                                       
  528.                         }        
  529.                 }
  530.                 if(menu_2 == 7)                  //設置日
  531.                 {
  532.                         if(key_can == 3)        //加
  533.                         {
  534.                     ri+=0x01;
  535.                         if((ri & 0x0f) >= 0x0a)
  536.                                 ri = (ri & 0xf0) + 0x10;
  537.                         if(ri >= 0x32)
  538.                                 ri = 0;                        
  539.                         }               
  540.                         if(key_can == 4)        //減         
  541.                         {
  542.                                 if(ri == 0x01)
  543.                                         ri = 0x32;
  544.                                 if((ri & 0x0f) == 0x00)
  545.                                         ri = (ri | 0x0a) - 0x10;
  546.                                 ri -- ;                        
  547.                         }        
  548.                 }
  549.                 write_sfm2_ds1302(1,2,shi);           //顯示時
  550.                 write_sfm2_ds1302(1,5,fen);           //顯示分
  551.                 write_sfm2_ds1302(1,8,miao);           //顯示秒
  552.                 write_sfm1(1,14,week);           //顯示星期                                       
  553.                 write_sfm2_ds1302(2,3,nian);           //顯示年
  554.                 write_sfm2_ds1302(2,6,yue);           //顯示月
  555.                 write_sfm2_ds1302(2,9,ri);           //顯示日
  556.                 switch(menu_2)           // 光標顯示
  557.                 {
  558.                         case 1:  write_guanbiao(1,2,1);  break;
  559.                         case 2:  write_guanbiao(1,5,1);  break;
  560.                         case 3:  write_guanbiao(1,8,1);  break;
  561.                         case 4:  write_guanbiao(1,14,1); break;
  562.                         case 5:  write_guanbiao(2,3,1);  break;
  563.                         case 6:  write_guanbiao(2,6,1);  break;
  564.                         case 7:  write_guanbiao(2,9,1);  break;
  565.                 }
  566.                 write_time();           //把時間寫進去
  567.         }        

  568.         if(menu_1 == 2)
  569.         {               
  570.                 if(menu_2 == 1)                  //設置速度
  571.                 {
  572.                         if(key_can == 3)        //加
  573.                         {
  574.                                 bj_shudu++;
  575.                                 if(bj_shudu >= 99)
  576.                                         bj_shudu = 99;
  577.                         }        
  578.                         if(key_can == 4)        //減         
  579.                         {
  580.                                 if(bj_shudu != 0)
  581.                                         bj_shudu -- ;                        
  582.                         }
  583.                 }        
  584.                 if(menu_2 == 2)                  //把總量程清零
  585.                 {
  586.                         if(key_can == 3)        
  587.                         {
  588.                                 zong_lc= 0;
  589.                         }        
  590.                         if(key_can == 4)                  
  591.                         {
  592.                                 zong_lc= 0;                        
  593.                         }
  594.                 }        


  595.                 write_sfm2(1,7,bj_shudu);   //顯示報警速度
  596.                 write_sfm7(2,4,zong_lc);   //顯示
  597.                
  598.                 switch(menu_2)           // 光標顯示
  599.                 {
  600.                         case 1:  write_guanbiao(1,6,1);  break;
  601.                         case 2:  write_guanbiao(2,3,1);  break;
  602.                 }
  603.         }
  604.         if(menu_1 == 3)
  605.         {               
  606.                 if(key_can == 3)        //加
  607.                 {
  608.                         s_zhijing++;
  609.                         if(s_zhijing >= 999)
  610.                                 s_zhijing = 999;
  611.                 }        
  612.                 if(key_can == 4)        //減         
  613.                 {
  614.                         if(s_zhijing != 0)
  615.                                 s_zhijing -- ;                        
  616.                 }
  617.                 zhijing = s_zhijing ;
  618.                 write_sfm2(2,5,s_zhijing);                //顯示
  619.         }
  620. }

  621. /****************報警函數***************/
  622. void clock_h_l()
  623. {
  624.         static uchar value;           
  625.         if((shudu >= bj_shudu))
  626.         {
  627.                 value ++;  //消除實際距離在設定距離左右變化時的干擾
  628.                 {
  629.                         beep = ~beep;           //蜂鳴器報警                        
  630.                 }        
  631.         }
  632.         else
  633.         {
  634.                 beep = 1;        
  635.         }                        
  636. }


  637. /******************主程序**********************/           
  638. void main()
  639. {
  640.         init_1602();      //1602初始化
  641.         init_int0();
  642.         time_init();          //定時器0初始化程序
  643.         while(1)
  644.         {         //  shudu = 11;
  645.                 key();                         //按鍵程序
  646.                 if(key_can < 10)
  647.                 {
  648.                         key_with();        

  649.                 }
  650.                 if(flag_200ms == 1)
  651.                 {
  652.                         flag_200ms = 0;
  653.                         read_time();                  //讀時間
  654.                         init_1602_ds1302();   //顯示時鐘
  655.                         menu_dis();          //計算速度函數
  656.                         clock_h_l();        //報警函數
  657.                 }
  658.         }
  659. }


  660. /*********************外部中斷0中斷服務程序************************/
  661. void int0() interrupt 0
  662. {
  663.         static uchar value=1;
  664.         switch(value)
  665.         {
  666.                 case 0:
  667.                         t1_num = 0;                 //第一次就把變量清零
  668.                         TH1 = 0;
  669.                         TL1 = 0;
  670.                         break;
  671.                 case 1:
  672.                                 t2_num = t1_num;  //保存
  673.                                 TH11 = TH1;
  674.                                 TL11 = TL1;
  675.                                 flag_en = 1;
  676.                         break;
  677.         }               
  678. }

  679. /*************定時器0中斷服務程序***************/
  680. void time0_int() interrupt 1
  681. {        
  682.         static uchar value=1;
  683.         TH0 = 0x3c;
  684.         TL0 = 0xb0;     // 50ms
  685.         value++;
  686.         if(value % 4 == 0)
  687.                 flag_200ms = 1;

  688.         if(value >= 20)  //1秒   才是一秒鐘的速度
  689.         {
  690.                 value = 0;
  691.                 flag_1s = 1;
  692.         }
  693. }

  694. /*************定時器1中斷服務程序***************/
  695. void time1_int() interrupt 3
  696. {
  697.         t1_num++;
  698. }

復制代碼

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线一区 | 欧美一区二区三区四区视频 | 精品久久av | 亚洲视频免费播放 | 色爱综合网| 久久久久久艹 | 欧美久 | 国产欧美日韩一区二区三区在线观看 | 爱综合| 91精品在线观看入口 | 九色网址 | 久久精品视频12 | 亚洲精品中文字幕中文字幕 | 精品欧美一区二区三区精品久久 | 97精品超碰一区二区三区 | 五月婷婷在线视频 | 精品免费视频一区二区 | 欧美精品福利 | 日韩在线视频观看 | www.夜夜草 | 夜夜摸夜夜操 | 亚洲国产精品一区二区久久 | 国产精品福利网 | 日韩中文字幕一区 | 欧美日韩亚洲国产 | 国产综合精品 | www国产成人免费观看视频 | 亚洲成人福利视频 | 极品的亚洲 | 九九九精品视频 | 精品国产18久久久久久二百 | 成人精品国产 | 91视在线国内在线播放酒店 | 日韩欧美国产一区二区三区 | www.久久 | 亚洲在线一区 | 婷婷久久久久 | 羞羞视频在线观免费观看 | 一区二区三区高清不卡 | 黄色大全免费看 | 国产精品高潮呻吟久久av野狼 |