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

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

QQ登錄

只需一步,快速開(kāi)始

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

通過(guò)CAN總線單字節(jié)發(fā)送0-F 儀表壽命驅(qū)動(dòng)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:282577 發(fā)表于 2018-2-6 13:10 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. //===================================================================================
  2. // 工程名稱: 通過(guò)CAN總線單字節(jié)發(fā)送0-F
  3. // 功能描述: CAN通信測(cè)試程序,CAN中繼器的功能
  4. //  IDE環(huán)境:   ICCAVR
  5. // 組成文件: main.c, REG51.h 2515.h, CAN.h ,function.h
  6. // Content:
  7. //  Init2515: 2515初始化程序
  8. //  CAN_ Send: CAN發(fā)送子程序,查詢發(fā)送
  9. //  CAN_Receive:CAN接收子程序,中斷接收   
  10. //   
  11. // 硬件連接:  AT89S51/52+MCP2515
  12. //
  13. // 維護(hù)記錄: 2009-6-17 v1.0
  14. //===================================================================================
  15. #include<iom8v.h>
  16. #include<bit.h>
  17. #include <macros.h>
  18. #include <math.h>
  19. #include "2515.h"
  20. #include "SPI_Ctrl.h"
  21. #include "Function.h"
  22. #include "CAN0.h"
  23. #define uint unsigned int
  24. #define uchar unsigned char
  25. //sbit key=P2^5; //Button按鍵
  26. #define key_si1 PINDBIT1
  27. #define key_si2 PINDBIT2
  28. #define key_si3 PINDBIT3
  29. //sbit P3_5=P3^5;//數(shù)碼管位選
  30. //sbit P2_6=P2^6;
  31. #define IGN_CLR PORTC &= ~(1 << PC0)
  32. #define IGN_SET PORTC |= (1 << PC0)
  33. #define BATT_CLR PORTC &= ~(1 << PC1)
  34. #define BATT_SET PORTC |= (1 << PC1)
  35. #define TTH_CLR PORTC &= ~(1 << PC2)
  36. #define TTH_SET PORTC |= (1 << PC2)
  37. #define TTL_CLR PORTC &= ~(1 << PC3)
  38. #define TTL_SET PORTC |= (1 << PC3)
  39. #define RESI_CLR PORTC &= ~(1 << PC4)
  40. #define RESI_SET PORTC |= (1 << PC4)
  41. char runmodel=000;   //全局運(yùn)行模式編碼
  42. char i=0;   //i是單雙周期判斷變量
  43. char Counter = 0;                // 10mS計(jì)數(shù)變量清零 ,變量聲明
  44. long num=0;    //轉(zhuǎn)速can信號(hào)變量
  45. long num1=800;    //轉(zhuǎn)速can信號(hào)變量
  46. char can=0;    //轉(zhuǎn)速can信號(hào)變量
  47. char rev=0;    //轉(zhuǎn)速can信號(hào)變量
  48. long p=1;     //檔位顯示變量
  49. int pc;      //檔位顯示變量
  50. long t2=1;     //t2完成變量
  51. unsigned char msg;
  52. unsigned char kflag = 0;
  53. unsigned char gRXFlag = 0;
  54. #define fosc 6000000
  55. //晶振6MHZ
  56. unsigned int j;
  57. unsigned int k;
  58. char CanKeepCNT =0;
  59. int CanCNT=0;
  60. char Counter1 = 0;                // 1S計(jì)數(shù)變量清零 ,變量聲明
  61. #pragma interrupt_handler timer1_ovf_isr:9
  62. #pragma interrupt_handler timer0_ovf:10
  63. /**************************************************************定時(shí)器0中斷函數(shù)*/
  64. void timer0_ovf(void)
  65. {
  66.   TIMSK&=~(1<<TOIE0);   //關(guān)閉T0溢出中斷
  67. TCNT0 =146;        //重裝計(jì)數(shù)初值
  68. /*********************************************************************/
  69. if(rev==0)
  70. {
  71. if (num<=150)  Send_prndl_ON(1);
  72. if ((num>150)&(num<=300))  Send_prndl_ON(2);
  73. if ((num>300)&(num<=450))  Send_prndl_ON(3);
  74. if ((num>450)&(num<=600))  Send_prndl_ON(4);
  75. if ((num>600)&(num<=750))  Send_prndl_ON(5);
  76. if (num>750)  Send_prndl_ON(6);
  77. }
  78. else
  79. {
  80. if (num<=100)  Send_prndl_ON(12);
  81. if ((num>100)&(num<=250))  Send_prndl_ON(10);
  82. if ((num>250)&(num<=400))  Send_prndl_ON(9);
  83. if ((num>400)&(num<=650))  Send_prndl_ON(8);
  84. if (num>650)  Send_prndl_ON(7);
  85. }
  86. /*********************************************************************/
  87. delay_ms(1);
  88.   if(rev==0)
  89.     {
  90.   if (num>=790)
  91.      {
  92.      if (CanKeepCNT<40)//最大位置后等待
  93.         {
  94.      Send_Tacho(num*10);
  95.      CanKeepCNT=CanKeepCNT+1;
  96.      }
  97.      else
  98.      {
  99.         rev=1;
  100.      CanKeepCNT=0;
  101.      }
  102.      }
  103.      else
  104.      {
  105.      num=num+3;
  106.      Send_Tacho(num*10);
  107.      j=num/5+10;
  108.      //TIMSK|=(1<<TOIE1);   //T/C1 溢出中斷允許
  109.        if (k<=10)
  110.     {
  111.     k++;
  112.     }
  113.     else
  114.     {
  115.     PWM_out(j);
  116.     k=0;
  117.     }
  118.      }
  119.      
  120.   }
  121. else
  122.   {
  123.   if (num<=0)
  124.   {
  125.      if (CanKeepCNT<30)//最小位置后等待
  126.         {
  127.      Send_Tacho(0);
  128.      j=0;
  129.      CanKeepCNT=CanKeepCNT+1;
  130.      TCCR1B = 0; //stop
  131.       }
  132.      else
  133.      {
  134.         rev=0;
  135.      CanKeepCNT=0;
  136.      num=0;
  137.         Send_Tacho(0);
  138.         can=0;
  139.      }
  140.      }
  141.   else
  142.   {
  143.   num=num-3;
  144.   Send_Tacho(num*10);
  145.   j=num/5-10;
  146.   
  147.   //TIMSK|=(1<<TOIE1);   //T/C1 溢出中斷允許
  148.   if (k<=10)
  149.   {
  150.   k++;
  151.   }
  152.   else
  153.   {
  154.   PWM_out(j);
  155.   k=0;
  156.   
  157.   }
  158.   }
  159.   

  160. }
  161. /*******************
  162. if(rev==0)
  163.     {
  164.   if (j<=1500)
  165.      {
  166.      TIMSK|=(1<<TOIE1);   //T/C1 溢出中斷允許
  167.      j=j+2;
  168.      }
  169.    else
  170.      {
  171.     j=1500;
  172.     TIMSK|=(1<<TOIE1);   //T/C1 溢出中斷允許
  173.     }
  174.   }
  175. else
  176.   {
  177.   if (j>=0)
  178.      {
  179.      TIMSK|=(1<<TOIE1);   //T/C1 溢出中斷允許
  180.      j=j-2;
  181.      }
  182.    else
  183.      {
  184.     j=0;
  185.     TIMSK|=(1<<TOIE1);   //T/C1 溢出中斷允許
  186.     }
  187.   }
  188. /****************************/

  189.   if (can==1)
  190.    {
  191.     TIMSK|=(1<<TOIE0);   //使能T0溢出中斷
  192.     }
  193. }
  194. /*******************************************************************中斷0配置*/
  195. void timer0_init()
  196. {
  197. SREG = 0x80;          //使能全局中斷
  198. //TIMSK|=(1<<TOIE0);   //使能T0溢出中斷
  199. TCCR0|=(1<<CS02)|(0<<CS01)|(1<<CS00);  // T/C0工作于普通模式,1024分頻,
  200.                                  //定時(shí)器頻率 = 8M/1024 =7812.5Hz
  201. TCNT0 =146;          //定時(shí)初值設(shè)置,定時(shí)時(shí)間 =(256-61)/7812.5=25ms
  202.             //6M/1024=5859.375  256-168=88/5859.375=0.015s
  203.        //256-139=117/5859.375=0.0199        
  204.       //256-146=110/5859.375=0.0187
  205. //256-81=175/5859.375=0.0298
  206. }
  207. //T1初始化程序
  208. /*
  209. void timer1_init(void)
  210. {
  211. TCCR1B = 0; //stop
  212. TCNT1H = 0;
  213. ICR1=0xFF00;
  214. OCR1A=100;
  215. OCR1B=100;
  216. TCCR1A =(0<<WGM11)|(0<<WGM10)|(1<<COM1A1)|(0<<COM1A0);//|(1<<COM1B1)|(1<<COM1B0);
  217. //升序記數(shù)時(shí)比較匹配將清零OC1A/OC1B,降序記數(shù)時(shí)比較匹配將置位OC1A/OC1B
  218. TCCR1B =(1<<WGM13)|(0<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10);//(1<<WGM13)|(1<<WGM12)|(1<<CS10); //0x1A //start Timer
  219. //相位與頻率修正PWM,64分頻
  220. }
  221. void PWM_out(unsigned int intFreq)
  222. {
  223. //if (intFreq<=0)
  224.      //TCCR1B = 0; //stop
  225. ICR1=fosc/(intFreq*2*6.4);
  226. OCR1A=ICR1/2;
  227. }*/
  228. //T1初始化程序
  229. void timer1_init(void)
  230. {
  231. TCCR1B = 0; //stop
  232. //TCNT1H = 0;
  233. //ICR1=0xFFFF;
  234. OCR1A=0x0FFF;
  235. TCCR1A =(0<<WGM11)|(0<<WGM10)|(0<<COM1A1)|(1<<COM1A0);//WGM[3:0]=4;
  236. TCCR1B =(0<<WGM13)|(1<<WGM12)|(1<<CS12)|(0<<CS11)|(1<<CS10);//N=1024,start Timer
  237. TCNT1H = 0;
  238. }
  239. void PWM_out(unsigned int intFreq)
  240. {
  241.   if (intFreq!=0)
  242. {
  243. OCR1A=2930/intFreq;
  244. TCNT1H = 0;
  245. TCNT1L = 0;
  246. }
  247. else
  248. {OCR1A=0;
  249. }

  250. }
  251. /*********************************************/

  252. #pragma interrupt_handler timer1_ovf_isr:9
  253. void timer1_ovf_isr(void)
  254. {
  255. //TIMSK&=~(1<<TOIE1);   //T/C1 溢出中斷關(guān)閉
  256. //PWM_out(j);
  257. }
  258. void pwm(void)
  259.     {
  260. PWM_out(1);
  261. for(j=1;j<1500;j=j+15)
  262. {TIMSK|=(1<<TOIE1);   //T/C1 溢出中斷允許
  263. delay_ms(50);
  264. }
  265. for(j=1500;j>=30;j=j-15)
  266. {TIMSK|=(1<<TOIE1);   //T/C1 溢出中斷允許
  267. delay_ms(50);
  268. }
  269. delay_ms(200);
  270. TIMSK&=~(1<<TOIE1);   //T/C1 溢出中斷關(guān)閉
  271. }
  272. //*************************************************************
  273. //*   函數(shù)說(shuō)明:MCU端口初始化                             *
  274. //*   輸入:    無(wú)                                       *
  275. //*   輸出:    無(wú)                                           *
  276. //*   調(diào)用函數(shù):                                         *
  277. //*************************************************************
  278. void port_init(void)     //IO端口初始化
  279. {
  280.   //DDRA|=(0Xfc);    //PA output LCD data
  281.   //PORTA&=~(0Xff);  
  282.   
  283.   //DDRD=0xff;     //can信號(hào)cs端口
  284.   //PORTD=0xff;    //can信號(hào)cs端口
  285.   DDRDBIT3=0;
  286.   PORTDBIT3=1;
  287.   DDRBBIT0=1;
  288.   PORTBBIT0=1;
  289.         
  290.   //DDRD  &= ~(1 << PD2);
  291.   //PORTD |= (1 << PD2);
  292.   //MCUCR = 0X00;      //低電平出發(fā)中斷
  293.   //GICR = (1 << INT0);   //INT0中斷使能
  294. DDRB=1<<1;    //PWM輸出端口為輸出
  295. PORTB=1<<1;
  296.   
  297.   
  298. }
  299. //call this routine to initialize all peripherals
  300. void init_devices(void)
  301. {
  302. //stop errant interrupts until set up
  303. CLI(); //disable all interrupts
  304. port_init();

  305. MCUCR = 0x00;
  306. //EMCUCR = 0x00;
  307. GICR = 0x00;
  308. TIMSK = 0x00;
  309. SEI(); //re-enable interrupts
  310. //all peripherals are now initialized
  311. }
  312.   //延時(shí)函數(shù)
  313. void CAN_ID(unsigned long ID)
  314. {
  315.    unsigned int IDH;
  316.   unsigned int IDL;
  317.   IDH= ID>>3;/右移3位
  318.   IDL=(ID & 7)<< 5;/取底3位左移5位
  319.    SPIByteWrite(TXB0SIDH,IDH);//設(shè)置發(fā)送緩沖器0的標(biāo)準(zhǔn)標(biāo)識(shí)符,待修改***
  320.   SPIByteWrite(TXB0SIDL,IDL);//用到標(biāo)準(zhǔn)標(biāo)識(shí)符
  321. }
  322. void Send_Tacho(unsigned long iTacho)//iTacho 0-7000
  323. {
  324.    unsigned int ValH;
  325.   unsigned int ValL;
  326.   unsigned char b[8]={0x0,0x00,0x00,0x00,0x7D,0x00,0x00,0x7D};
  327.   ValL=iTacho*4 ;
  328.   ValH=iTacho*4 >>8;
  329.   b[2]=ValH;
  330.   b[3]=ValL;
  331.   CAN_ID(0x094);
  332.   CAN_Send(b);
  333. }
  334.   
  335. /*****************************************************************************/  
  336. void Send_Temperature_full(void)//iTemperature 130
  337. {
  338.    
  339.   unsigned char b[8]={0xDF,0x02,0x00,0x50,0x00,0x00,0x00,0x00};
  340.   CAN_ID(0x288);
  341.   CAN_Send(b);

  342. }
  343. void Send_Temperature_zoo(void)//iTemperature 50
  344. {
  345.   
  346.   unsigned char b[8]={0x74,0x02,0x00,0x50,0x00,0x00,0x00,0x00};
  347.   CAN_ID(0x288);
  348.   CAN_Send(b);
  349. }
  350. /*****************************************************************************/

  351. /*****************************************************************************/
  352. void Send_ashen_background(void)//進(jìn)入LED診斷環(huán)境
  353. {
  354.   unsigned char b2[5]={0x04,0x31,0xFA,0x08,0xFF};
  355.    CAN_ID(0x7E3);
  356.    CAN_Send(b2);
  357. }
  358. void Send_allset(void)//LED全部亮
  359. {
  360.   unsigned char b1[6]={0x05,0x31,0xFA,0x1C,0xE7,0xFF};
  361.    CAN_ID(0x7E3);
  362.     CAN_Send(b1);         
  363. }
  364. void Send_allclr(void)//LED全部關(guān)
  365. {
  366.   unsigned char b2[6]={0x05,0x31,0xFA,0x1C,0x00,0x00};
  367.    CAN_ID(0x7E3);
  368.    CAN_Send(b2);
  369. }
  370. /*****************************************************************************/

  371. /*****************************************************************************/
  372. void Send_door_ON(void)//四個(gè)車門(mén)-全亮
  373. {
  374. unsigned char b[3]={0xF0,0x23,0x00};
  375. CAN_ID(0x4D4);
  376. CAN_Send(b);
  377. }
  378. /*****************************************************************************/
  379. void Send_Wakeup(void)//Wakeup msg
  380. {
  381. unsigned char b[5]={0x00,0x00,0x00,0x00,0x00};
  382. CAN_ID(0x400);
  383. CAN_Send(b);
  384. }
  385. /*****************************************************************************/
  386. void Send_prndl_OFF(void)//檔位的不同顯示
  387. {
  388. unsigned char b[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  389.   CAN_ID(0x115);
  390.   CAN_Send(b);
  391.    
  392. }
  393. void Send_prndl_ON(long b)//
  394. {
  395. unsigned char b1[8]={0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00};
  396. unsigned char b2[8]={0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00};
  397. unsigned char b3[8]={0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00};
  398. unsigned char b4[8]={0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00};
  399. unsigned char b5[8]={0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00};
  400. unsigned char b6[8]={0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00};
  401. unsigned char br[8]={0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00};
  402. unsigned char bp[8]={0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00};
  403. unsigned char bn[8]={0x00,0x00,0x00,0xF1,0x00,0x00,0x00,0x00};
  404. unsigned char bd[8]={0x00,0x00,0x00,0xF2,0x00,0x00,0x00,0x00};
  405. unsigned char bs[8]={0x00,0x00,0x00,0xF3,0x00,0x00,0x00,0x00};
  406. unsigned char bl[8]={0x00,0x00,0x00,0xF4,0x00,0x00,0x00,0x00};
  407. //unsigned char be[8]={0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00};
  408. CAN_ID(0x115);
  409. switch(b)
  410.   {
  411.   case 1:CAN_Send(b1);break;
  412.   case 2:CAN_Send(b2);break;
  413.   case 3:CAN_Send(b3);break;
  414.   case 4:CAN_Send(b4);break;
  415.   case 5:CAN_Send(b5);break;
  416.   case 6:CAN_Send(b6);break;
  417.   case 7:CAN_Send(br);break;
  418.   case 8:CAN_Send(bp);break;
  419.   case 9:CAN_Send(bn);break;
  420.   case 10:CAN_Send(bd);break;
  421.   case 11:CAN_Send(bs);break;
  422.   case 12:CAN_Send(bl);break;
  423.   //case 13:CAN_Send(be);break;
  424.    default:;break;
  425.   }
  426. }
  427. /*****************************************************************************
  428. void Send_prndl_DSI(long b)//DSI Mode
  429. {
  430. unsigned char r[8]={0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00};
  431. unsigned char p[8]={0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00};
  432. unsigned char n[8]={0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00};
  433. unsigned char d[8]={0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x00};

  434. CAN_ID(0x116);
  435. switch(b)
  436.   {
  437.   case 8:CAN_Send(r);break;
  438.   case 9:CAN_Send(p);break;
  439.   case 10:CAN_Send(n);break;
  440.   case 11:CAN_Send(d);break;
  441.    default:;break;
  442.   }
  443. }
  444. /*****************************************************************************/
  445. void Send_Sleep(void)      //進(jìn)入休眠狀態(tài)
  446. {
  447. unsigned char b[5]={0x00,0x00,0x00,0x00,0x00};
  448.   CAN_ID(0x401);
  449.   CAN_Send(b);
  450. }
  451. /*****************************************************************************/
  452. void Send_ON(void)//安全帶,門(mén),轉(zhuǎn)向燈
  453. {
  454. unsigned char b0[3]={0xFF,0x23,0x00};
  455. CAN_ID(0x4D4);
  456. CAN_Send(b0);
  457. }
  458. /*****************************************************************************/
  459. void Send_ESC()//電子穩(wěn)定控制報(bào)警
  460. {
  461. unsigned char b[8]={0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  462. CAN_ID(0x068);
  463. CAN_Send(b);
  464. }
  465. /*****************************************************************************/
  466. void Send_Seatbelt()//駕駛座安全帶開(kāi)
  467. {
  468. unsigned char b[2]={0x07,0x00};
  469.   CAN_ID(0x268);
  470.   CAN_Send(b);
  471. }
  472. /*****************************************************************************/
  473. void Send_Engine()//發(fā)動(dòng)機(jī)故障
  474. {
  475. unsigned char b[7]={0x00,0x02,0x00,0x00,0x00,0x00,0x00};
  476.   CAN_ID(0x288);
  477.   CAN_Send(b);
  478. }
  479. /*****************************************************************************/
  480. void Send_Cruise()//巡航
  481. {
  482. unsigned char b[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80};
  483.   CAN_ID(0x082);
  484.   CAN_Send(b);
  485. }
  486. /*****************************************************************************/  
  487. void stop(void)     //停止函數(shù)
  488. {
  489. /****************************
  490. Send_ashen_background();//進(jìn)入led診斷環(huán)境
  491. delay_ms(50);
  492. Send_allclr();//led全部滅
  493. /****************************/
  494. TIMSK&=~(1<<TOIE0);   //關(guān)閉T0溢出中斷
  495. TTH_CLR;//停止高電平
  496. TTL_CLR;//停止低電平
  497. RESI_CLR;//停止電阻
  498. IGN_CLR;//停止點(diǎn)火
  499. delay_ms(20);
  500. BATT_CLR;//停止電池
  501. delay_ms(500);
  502. }
  503. /****************************************************************************
  504. *****************************************************************************/
  505. void run(void)
  506. {
  507. can=1;
  508. num=0;
  509. num1=800;
  510. rev=0;

  511. TTH_CLR;//停止高電平
  512. TTL_CLR;//停止低電平
  513. IGN_CLR;//停止點(diǎn)火
  514. delay_ms(20);
  515. BATT_CLR;//停止電池
  516. timer1_init();   //PWM使用定時(shí)器初始化
  517. delay_ms(500);
  518. /******************************/
  519. if (i==0)
  520.    {
  521.    RESI_SET;//高電阻
  522.    }
  523. else
  524. {
  525. RESI_CLR;//低電阻
  526. }
  527. /**********************************/
  528. delay_ms(600);
  529. BATT_SET;//給電池
  530. delay_ms(20);
  531. IGN_SET;//給點(diǎn)火
  532. delay_ms(150);
  533. Send_prndl_ON(1);
  534. delay_ms(1500);
  535. /******************************/
  536. if (i==0)
  537.    {
  538.    Send_Temperature_full();//高溫
  539.    }
  540. else
  541. {
  542. Send_Temperature_zoo();//低溫
  543. }
  544. delay_ms(20);
  545. /**********************************
  546. Send_door_ON();//四個(gè)車門(mén)-全亮
  547. /***********************************/
  548. Send_prndl_ON(1);
  549. delay_ms(50);
  550. /****************************
  551. Send_ashen_background();//進(jìn)入led診斷環(huán)境
  552. delay_ms(50);
  553. Send_allset();//led全部亮
  554. /****************************/
  555. Send_ON();//車門(mén),轉(zhuǎn)向燈
  556. delay_ms(10);
  557. Send_ESC();//ESC
  558. delay_ms(10);
  559. Send_Seatbelt();//安全帶
  560. delay_ms(10);
  561. //Send_Engine();
  562. delay_ms(10);
  563. Send_Cruise();//巡航
  564. delay_ms(20);
  565. TTH_SET;//高電平
  566. TTL_SET;//低電平

  567. Send_prndl_ON(1);
  568. delay_ms(100);
  569. //轉(zhuǎn)盤(pán)掃描程序
  570. //TIMSK|=(1<<TOIE1);   //T/C1 溢出中斷允許
  571. //j=10;
  572. //DDRB=1<<1;    //PWM輸出端口為輸出
  573. //PORTB=1<<1;
  574. TIMSK|=(1<<TOIE0);   //使能T0溢出中斷
  575. while(can)    //等待掃描結(jié)束
  576. {

  577. //PWM_out(j);
  578. //delay_ms(200);
  579. }
  580. TIMSK&=~(1<<TOIE0);   //關(guān)閉T0溢出中斷
  581. //DDRB=0<<1;    //PWM輸出端口為輸入
  582.    if (i==0)   //i為0或者為1代表單周或者雙周
  583.   i=1;
  584. else
  585.   i=0;
  586. Init2515();
  587. //timer1_init();   //PWM使用定時(shí)器初始化
  588. //delay_ms(200);
  589. }//end run
  590. /******************************************************************************
  591. ******************************************************************************/
  592. void main()
  593. {
  594. char m1=0,m2=0,m3=0;   //模式編碼變量
  595. char before=000;//前次運(yùn)行模式變量
  596. port_init();
  597. PORTD=0xff;
  598. SPI_MasterInit();//SPI初始化,并啟動(dòng)
  599. Init2515();
  600. timer1_init();   //PWM使用定時(shí)器初始化
  601. timer0_init();
  602. //TIMSK&=~(1<<TOIE1);   //T/C1 溢出中斷關(guān)閉
  603. //TIMSK|=(1<<TOIE1);   //T/C1 溢出中斷允許
  604. delay_ms(2000);

  605. while(0)
  606. {
  607. run();
  608. }
  609. while(1)
  610.   {

  611.   
  612.    if(key_si1)  //
  613.      {
  614.     delay_ms(20); //延時(shí)去抖,一般10-20ms
  615.        if(key_si1)     //再次確認(rèn)按鍵是否按下,沒(méi)有按下則退出
  616.        {
  617.    m1=1;
  618.    
  619.    }
  620.   }
  621.   if(!key_si1)  //
  622.      {
  623.     delay_ms(20); //延時(shí)去抖,一般10-20ms
  624.        if(!key_si1)     //再次確認(rèn)按鍵是否按下,沒(méi)有按下則退出
  625.        {
  626.    m1=0;
  627.    
  628.    }
  629.   }
  630.   
  631. /********************************************************************/
  632.   if(key_si2)  //
  633.      {
  634.     delay_ms(20); //延時(shí)去抖,一般10-20ms
  635.        if(key_si2)     //再次確認(rèn)按鍵是否按下,沒(méi)有按下則退出
  636.        {
  637.    m2=1;
  638.    }
  639.   }
  640.   if(!key_si2)  //
  641.      {
  642.     delay_ms(20); //延時(shí)去抖,一般10-20ms
  643.        if(!key_si2)     //再次確認(rèn)按鍵是否按下,沒(méi)有按下則退出
  644.        {
  645.    m2=0;
  646.    }
  647.   }
  648.    
  649. /********************************************************************/
  650.   if(key_si3)  //外部測(cè)試
  651.      {
  652.     delay_ms(500); //延時(shí)去抖,一般10-20ms
  653.        if(key_si3)     //再次確認(rèn)按鍵是否按下,沒(méi)有按下則退出
  654.        {
  655.    m3=1;
  656.    
  657.    }
  658.   }
  659.   if(!key_si3)  //外部測(cè)試
  660.      {
  661.     delay_ms(20); //延時(shí)去抖,一般10-20ms
  662.        if(!key_si3)     //再次確認(rèn)按鍵是否按下,沒(méi)有按下則退出
  663.        {
  664.    m3=0;
  665.    
  666.    }
  667.   }
  668.    
  669. /********************************************************************/
  670. runmodel=m3*100+m2*10+m1;//m1,m2,m3編碼組合
  671. //runmodel=000;
  672. delay_ms(2);
  673. switch(runmodel)    //判斷編碼模式
  674. {
  675. case 100:     //正常模式,驅(qū)動(dòng)板停止工作
  676.   if (before==100)
  677.    {
  678.   stop();
  679.   before=100;
  680.   }
  681. else
  682.   {
  683.   stop();
  684.   before=100;
  685.   }  
  686.   break;
  687.   
  688. case 111:   //正常模式,驅(qū)動(dòng)板開(kāi)始工作
  689.   if (before==111)
  690.    {
  691.   before=111;
  692.   run();  //調(diào)用正常運(yùn)行函數(shù)
  693.   }
  694. else
  695.   {
  696.   stop();
  697.   delay_ms(1000);
  698.   run();  //調(diào)用正常運(yùn)行函數(shù)
  699.    before=111;
  700.   }
  701.   break;
  702.   
  703. case 11:   //外部測(cè)試模式,僅給電池和點(diǎn)火信號(hào)
  704.   if (before==11)
  705.    {
  706.   before=11;
  707.   delay_ms(3000);
  708.   }
  709. else
  710.   {
  711.   stop();
  712.   delay_ms(50);
  713.   BATT_SET;//給電池
  714.   delay_ms(10);
  715.   IGN_SET;//給點(diǎn)火
  716.   before=11;
  717.   
  718.   }  
  719.   break;   
  720.   
  721. case 110:     //m2有效,休眠模式,只給電池信號(hào)
  722.   if (before==110)
  723.    {
  724.   before=110;
  725.   delay_ms(1000);
  726.   }
  727. else
  728.   {
  729.   stop();
  730.   delay_ms(100);
  731.   BATT_SET;//給電池
  732.   delay_ms(500);
  733.   Send_Sleep();//進(jìn)入休眠
  734.   before=110;
  735.   }
  736. break;

  737. case 101:  //m1有效,外控模式,類似正常啟動(dòng)模式
  738.   if (before==101)
  739.    {
  740.   before=101;
  741.   run();  //調(diào)用正常運(yùn)行函數(shù)
  742.   
  743.   }
  744. else
  745.   {
  746.   stop();
  747.   delay_ms(1000);
  748.   run();  //調(diào)用正常運(yùn)行函數(shù)
  749.    before=101;
  750.   }
  751.   break;
  752.   
  753. default:stop();break;   
  754. }//end switch
  755. /******************************************************************/   
  756.   }//end while
  757. }//end main

復(fù)制代碼


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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91精品综合久久久久久五月天 | 欧美激情一区二区 | 国产1区| 久久一区二区三区免费 | 国产精品久久久久久久久久久久 | 亚洲成人一区 | 成人福利片 | 欧美久久一区二区三区 | 日韩1区2区 | 成人免费影院 | 乳色吐息在线观看 | 日韩中文视频 | 日韩在线免费视频 | 国产精品亚洲一区 | 精品一区在线免费观看 | 狠狠操狠狠干 | 成人高清在线 | 国产传媒毛片精品视频第一次 | 久久精品亚洲 | 国产精品1区2区3区 国产在线观看一区 | 国产精品久久久久久久久婷婷 | 中文字幕精品一区二区三区精品 | 精品国产免费一区二区三区五区 | 在线欧美一区二区 | 亚洲成人国产综合 | av免费在线播放 | 一区二区高清 | 久久的色 | 成人黄色av | 成人精品视频在线观看 | 国产在线网站 | 国产伦精品一区二区三区四区视频 | 偷拍第一页| 国产成人久久精品一区二区三区 | 中文字幕亚洲精品 | av黄色在线 | 成人3d动漫一区二区三区91 | 亚洲第一视频网站 | 欧美激情一区二区三级高清视频 | 欧一区 | 亚洲一区二区三区免费在线观看 |