Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.96 KB | None | 0 0
  1. #include <ioavr.h>
  2. #include <intrinsics.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #define E 0
  6. #define RS 1
  7. #define delTime 30000
  8. #define delTime1 9000
  9. #define LCDPORT PORTB
  10. #define LCDCTRL PORTC
  11.  
  12. static volatile int distance = 0;//interger to access all though the program
  13. static volatile int i=0;
  14. static volatile long q=0;
  15. static volatile long z=delTime1;
  16. //static volatile int timerVar=0;
  17. static volatile int mode=0;
  18.  
  19. void init (void)
  20. {
  21. //DDRD=0xFF;
  22. DDRD=0x10;//0b00010000; the 4th as output for triggering, rest are the inputs
  23. PORTD=0x00;
  24. DDRC=0xFF;
  25. DDRB=0xFF;
  26. EICRA |= (1 << ISC00);
  27. EICRA |= (1 << ISC11);// zmiana logiczna
  28. EIMSK |= (1 << INT0);
  29. EIMSK |= (1 << INT1);// int 1 wlacz
  30. TCCR1B = 0;
  31. TCCR0B|=(1<<CS00);
  32. TIMSK0|=(1<<TOIE0);
  33.  
  34. }
  35.  
  36. void send (unsigned char data){
  37. LCDCTRL|=(1<<E);
  38. LCDPORT=(data>>4);
  39. __delay_cycles(1000);
  40. LCDCTRL&=~(1<<E);
  41. __delay_cycles(1000);
  42. LCDCTRL|=(1<<E);
  43. LCDPORT=(data);
  44. __delay_cycles(1000);
  45. LCDCTRL&=~(1<<E);
  46. __delay_cycles(1000);
  47. }
  48.  
  49.  
  50. void initlcd (void){
  51. __delay_cycles(100000);
  52. LCDCTRL&=~(1<<RS);
  53. send(0x33);
  54. send(0x32);
  55. send(0x28);
  56. send(0x06);
  57. send(0x0C);
  58. send(0x01);
  59. __delay_cycles(100000);
  60.  
  61. }
  62. void clear (void){
  63. LCDCTRL&=~(1<<RS);
  64. send(0x01);
  65. __delay_cycles(400000);
  66. LCDCTRL|=(1<<RS);
  67.  
  68. }
  69.  
  70. void goTo10 (void){
  71. LCDCTRL&=~(1<<RS);
  72. send(0x8A);
  73. __delay_cycles(6000);
  74. LCDCTRL|=(1<<RS);
  75. }
  76. void goTo0 (void){
  77. LCDCTRL&=~(1<<RS);
  78. send(0x80);
  79. __delay_cycles(6000);
  80. LCDCTRL|=(1<<RS);
  81. }
  82.  
  83.  
  84. int main(void)
  85. {
  86.  
  87. int r;
  88. int q;
  89. int check=mode;;
  90. init();
  91. initlcd();
  92. LCDCTRL|=(1<<RS);
  93.  
  94. char txt[5];
  95. char n1[]="Object in ";
  96. // char tekst[]="Distance =";
  97. // char a3[]="Object in D";
  98. // char s4[]="Searching...";
  99. txt[3]='c';
  100. txt[4]='m';
  101. __enable_interrupt();
  102.  
  103. while(1)
  104. {
  105. if(mode==0)
  106. {
  107. if(mode!=check)
  108. {
  109. clear();
  110. // for(q=0;q<10;q++)
  111. // {
  112. // send(w2[q]);
  113. // }
  114. check=mode;
  115. }
  116.  
  117. if(distance<1000 && distance>=100/*&& z==delTime1*/)
  118. {
  119. txt[2]=distance%10+'0';
  120. distance=distance/10;
  121. txt[1]=distance%10+'0';
  122. distance=distance/10;
  123. txt[0]=distance%10+'0';
  124.  
  125. for(r=0;r<5;r++)
  126. {
  127. send(txt[r]);
  128. }
  129. goTo0();
  130. z=0;
  131.  
  132. __delay_cycles(5000000);
  133. }
  134. else if(distance<100 && distance>=10/*&& z==delTime1*/)
  135. {
  136. txt[2]=distance%10+'0';
  137. distance=distance/10;
  138. txt[1]=distance%10+'0';
  139. txt[0]=0+'0';
  140.  
  141. for(r=0;r<5;r++)
  142. {
  143. send(txt[r]);
  144. }
  145. goTo0();
  146. z=0;
  147. __delay_cycles(5000000);
  148. }
  149. else if(distance<10 && distance>0/*&& z==delTime1*/)
  150. {
  151. txt[2]=distance%10+'0';
  152. txt[1]=0+'0';
  153. txt[0]=0+'0';
  154.  
  155. for(r=0;r<5;r++)
  156. {
  157. send(txt[r]);
  158. }
  159. goTo0();
  160. z=0;
  161. __delay_cycles(5000000);
  162. }
  163. else if(distance<0/*&& z==delTime1*/)
  164. {
  165. send('-');
  166. send('-');
  167. send('-');
  168. goTo0();
  169.  
  170. z=0;
  171. }
  172. }
  173. else
  174. {
  175. if(mode!=check)
  176. {
  177. clear();
  178. for(q=0;q<10;q++)
  179. {
  180. send(n1[q]);
  181. }
  182. // __delay_cycles(8000000000);
  183. check=mode;
  184. }
  185. if(distance<100&&distance>=50)
  186. {
  187. // for(q=0;q<11;q++)
  188. // {
  189. // send(n1[q]);
  190. // }
  191. send('D');
  192. send('1');
  193. goTo10();
  194.  
  195. __delay_cycles(800000);
  196. }
  197. else if(distance<50&&distance>=20)
  198. {
  199. // for(q=0;q<11;q++)
  200. // {
  201. // send(w2[q]);
  202. // }
  203. send('D');
  204. send('2');
  205. goTo10();
  206.  
  207. __delay_cycles(800000);
  208. }
  209. else if(distance<20&&distance>=0)
  210. {
  211. // for(q=0;q<11;q++)
  212. // {
  213. // send(a3[q]);
  214. // }
  215. send('D');
  216. send('3');
  217. goTo10();
  218.  
  219. __delay_cycles(800000);
  220. }
  221. else if(distance>=100)
  222. {
  223. send('-');
  224. send('-');
  225. goTo10();
  226.  
  227. }
  228.  
  229. }
  230.  
  231. PORTD|=(1<<PD4);
  232.  
  233. __delay_cycles(300);///trigger
  234.  
  235. PORTD &=~(1<<PD4);
  236. }
  237. }
  238.  
  239.  
  240.  
  241. #pragma vector = TIMER0_OVF_vect
  242. __interrupt void click()
  243. {
  244. if(q<delTime)
  245. {
  246. q++;
  247. }
  248. // if(z<delTime1)
  249. // {
  250. // z++;
  251. // }
  252. }
  253.  
  254.  
  255.  
  256.  
  257. #pragma vector = INT0_vect
  258. __interrupt void mier()
  259. {
  260. if (i==1)//when logic from HIGH to LOW
  261. {
  262.  
  263. TCCR1B=0;//wylaczamy counter
  264.  
  265. /*
  266. 16MHz=1/T => T=0.0625us
  267. (0.0625us*340m/s)/2=0.001063 cm
  268. distance=TCNT1*0.001063 with prescaler =1
  269. distance=TCNT1*0.001063*8 with prescaler =8
  270. 1/900=0.0011
  271. */
  272.  
  273.  
  274. if(TCNT1<1600)
  275. {
  276. distance = TCNT1/108;
  277. }else if(TCNT1>=1600 && TCNT1<6500)
  278. {
  279. distance=TCNT1/114;
  280. }
  281. else if(TCNT1>=6500 /*&& TCNT1<18000*/)
  282. {
  283. distance=TCNT1/115;
  284. }
  285. // else if(TCNT1>=18000 )
  286. // {
  287. //// distance = (TCNT1/9)*8;
  288. //// distance=distance/101;
  289. // distance=TCNT1/116;
  290. // // distance=distance/910;
  291. // }
  292. if(distance>300)
  293. {
  294. distance=-1;
  295. }
  296.  
  297. if(TCNT1<400)
  298. {
  299. distance=-1;
  300. }
  301.  
  302. TCNT1=0;//reset
  303.  
  304. i=0;
  305. }
  306.  
  307. if (i==0)
  308. {
  309. //TCNT1=0;
  310. //TCCR1B|=(1<<CS10);//wlacznie counter
  311. TCCR1B|=(1<<CS11);
  312. i=1;
  313.  
  314. }
  315.  
  316. }
  317.  
  318. #pragma vector = INT1_vect
  319. __interrupt void switchMode()
  320. {
  321. if(q==delTime)
  322. {
  323. if(mode==0)
  324. {
  325.  
  326. mode=1;
  327.  
  328.  
  329. }else if (mode==1)
  330. {
  331.  
  332. mode=0;
  333.  
  334.  
  335. }
  336. q=0;
  337. }
  338.  
  339. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement