Advertisement
Guest User

Untitled

a guest
Mar 12th, 2014
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.79 KB | None | 0 0
  1. #include <avr/io.h>
  2. #define F_CPU 8000000UL
  3. #include <util/delay.h>
  4. #include <avr/interrupt.h>
  5. uint32_t t,pr=0,cnt=0,time1cnt=0;
  6. uint32_t time,time1,time2,time3;
  7.  
  8. void lcdinit()
  9. {
  10. cmd(0×38);
  11. cmd(0x0C);
  12. cmd(0×01);
  13. _delay_ms(1000);
  14. }
  15.  
  16. void cmd(unsigned char c)
  17. {
  18. PORTC=c;//??
  19. PORTA=0×20; //rw high?
  20. _delay_ms(1);
  21. PORTA=0×00;
  22. _delay_ms(1);
  23.  
  24. }
  25.  
  26. void data(unsigned char c)
  27. {
  28. PORTC=c;//??
  29. PORTA=0XA0; //rs high coz we hav accept data nt comand
  30. _delay_ms(1);
  31. PORTA=0×40;
  32. _delay_ms(1);
  33. cmd(0×06);
  34.  
  35. }
  36.  
  37. void string(char p)
  38. {
  39. while(p) data(*p++);
  40. }
  41.  
  42. uint16_t get_adc(unsigned char ch)
  43. {
  44. ADMUX=0×40|ch;
  45. ADCSRA=0xC5;
  46. while(!ADIF);
  47. _delay_ms(50);
  48. return(ADC);
  49. }
  50.  
  51. unsigned char keypad()
  52. {
  53. while((PINB & 0b00001111)!=0b00001111);
  54.  
  55. PORTB=0X7f; _delay_ms(10);
  56.     if (PINB==0B01110111)           {/*data('1');*/     return '1';}
  57.     else if (PINB==0B01111011)      {data('2');     return '2';}
  58.     else if (PINB==0B01111101)      {data('3');     return '3';}
  59.     else if (PINB==0B01111110)      {data('A');     return 'A';}
  60.     PORTB=0XBf; _delay_ms(10);
  61.     if (PINB==0B10110111)           {data('4');     return '4';}
  62.     else if (PINB==0B10111011)      {data('5');     return '5';}
  63.     else if (PINB==0B10111101)      {data('6');     return '6';}
  64.     else if (PINB==0B10111110)      {data('B');     return 'B';}
  65.     PORTB=0XDf; _delay_ms(10);
  66.     if (PINB==0B11010111)           {data('7');     return '7';}
  67.     else if (PINB==0B11011011)      {data('8');     return '8';}
  68.     else if (PINB==0B11011101)      {data('9');     return '9';}
  69.     else if (PINB==0B11011110)      {   return 'C';}
  70.     PORTB=0XEf; _delay_ms(10);
  71.     if (PINB==0B11100111)           {   return '*'; }
  72.     else if (PINB==0B11101011)      {data('0');     return '0';}
  73.     else if (PINB==0B11101101)      {   return '#';}
  74.     else if (PINB==0B11101110)      {               return 'D';}
  75.  
  76.     return 0;          
  77. }
  78.  
  79. ISR(TIMER1_CAPT_vect)
  80. {
  81.  
  82. t=ICR1;
  83.  
  84.  
  85.     if(cnt==9)
  86.     {
  87.     cli();
  88.     cmd(0X01);_delay_ms(10);
  89.     uint32_t temp1;
  90.     unsigned char temp;
  91.     /*pr=t;*/
  92.     pr=(uint32_t)(pr/9);
  93.     pr=(uint32_t)(60000000/pr);
  94.     pr=(uint32_t)(pr/128);          //rpm
  95.     temp1=pr%1000;  
  96.  
  97.     temp=(unsigned char)temp1;
  98.     data((temp/100)+48);
  99.     temp=(unsigned char)temp%100;
  100.     data((temp/10)+48);
  101.     temp=(unsigned char)temp%10;
  102.     data(temp+48);
  103.     string(" rpm");
  104.  
  105.     cmd(0xc0);
  106.     pr=(uint32_t)(pr*60);
  107.     pr=(uint32_t)(pr*22);
  108.     pr=(uint32_t)(pr/1000);     //kms per hour
  109.  
  110.     temp1=pr%1000;
  111.  
  112.     temp=(unsigned char)temp1;
  113.     data((temp/100)+48);
  114.     temp=(unsigned char)temp%100;
  115.     data((temp/10)+48);
  116.     temp=(unsigned char)temp%10;
  117.     data(temp+48);
  118.     string(" kmph");
  119.     cnt=0;
  120.     pr=0;
  121.  
  122.  
  123.     if(temp1<50)
  124.     {
  125.         time=0;
  126.     }
  127.     else if(temp1<170)
  128.     {
  129.         time1=time+pr;
  130.         if (time1>4294967296)
  131.         {
  132.             time1cnt++;
  133.             time1=0;
  134.         }
  135.  
  136.     }
  137.     else if (temp1>=170)
  138.     {
  139.         cmd(0x88);
  140.         temp=(unsigned char)time1cnt%1000;
  141.         data((temp/100)+48);
  142.         temp=(unsigned char)temp%100;
  143.         data((temp/10)+48);
  144.         temp=(unsigned char)temp%10;
  145.         data(temp+48);
  146.  
  147.         cmd(0xc9);
  148.         string("a:");
  149.         time1=time1/1000000;
  150.         time1=time1*128;
  151.         time1=time1%1000;
  152.  
  153.         temp=(unsigned char)time1;
  154.         data((temp/100)+48);
  155.         temp=(unsigned char)temp%100;
  156.         data((temp/10)+48);
  157.         temp=(unsigned char)temp%10;
  158.         data(temp+48);
  159.         data('s');
  160.     }
  161.     sei();
  162.     }
  163.     else
  164.     {      
  165.     pr=pr+t;
  166.     cnt++;
  167.     }
  168. TCNT1=0;
  169.  
  170. }
  171. void delay_ms(uint32_t delay)
  172. {
  173. while(delay)
  174. {
  175. _delay_ms(1);
  176. delay–;
  177. }
  178. }
  179. int main(void)
  180. {
  181. DDRB=0XF0;
  182. PORTB=0X0F;
  183.  
  184. DDRA=0XF0;
  185. DDRC=0XFF;
  186.  
  187. DDRD=0B10111111;
  188. PORTD|=0B01000000;
  189. lcdinit();
  190. // string(” VEHICLE TESTER”);
  191. TCNT1H=0×00;
  192. TCNT1L=0×00;
  193. TCCR1B=0X45;
  194. TIMSK|=(1<<5);
  195.  
  196. unsigned char key,x,y,z;
  197. uint16_t adcval,temp;
  198. int acc,decc;
  199. uint32_t del;
  200. sei();
  201.  
  202. PORTD&=~0b00010000;
  203. while(1)
  204. {
  205.     key=keypad();
  206.     if(key=='1')
  207.     {
  208.         sei();
  209.         key=0;
  210.         del=100;
  211.         while(del)
  212.         {
  213.             PORTD&=0b11101111;
  214.             PORTD|=0b00100000;
  215.             delay_ms(del);
  216.             PORTD&=0b11011111;
  217.             delay_ms(del);
  218.             del--;
  219.         }
  220.         cli();
  221.         //cmd(0x01);_delay_ms(100);
  222.         //data(acc)
  223.     }
  224.     if (key=='2')
  225.     {
  226.         cmd(0x01);
  227.         adcval=get_adc(0);
  228.         adcval=1023;
  229.         temp=((adcval/1023)*100);
  230.         temp=temp%1000;
  231.         x=(temp/100)+48;
  232.         data(x);
  233.         temp=temp%100;
  234.         y=(temp/10)+48;
  235.         data(y);
  236.         temp=temp%10;
  237.         z=temp+48;
  238.         data(z);
  239.         string(" %");
  240.     }
  241. }
  242. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement