kiritokun1993

VXL

Dec 5th, 2014
354
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.67 KB | None | 0 0
  1. /******************************************************************************
  2. * Project : EX6 - KEYPAD LAB - LCD 4BIT
  3. * MCU : PIC16F887
  4. * Xtal : 4Mhz
  5. * Complier: Hitech PIC C V9.83
  6. * author: Pham van Thien
  7. *
  8. ******************************************************************************/
  9.  
  10. #include <pic.h>
  11. #include "lcd_4bit.h"
  12.  
  13.  
  14.  
  15. __CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & LVP_OFF & DEBUG_OFF &
  16. BOREN_OFF & CP_OFF & CPD_OFF & FCMEN_OFF & IESO_OFF); //1st config. word
  17. __CONFIG(BOR4V_BOR21V);
  18.  
  19. #define _XTAL_FREQ 4000000
  20. //----------------------a-------------------------------------------------
  21. #define KEY PORTC //ket noi BAN PHIM 4x4
  22. #define LED_PORT PORTB
  23.  
  24. #define col_0 RC4
  25. #define col_1 RC5
  26. #define col_2 RC6
  27. #define col_3 RC7
  28.  
  29.  
  30. char key_tab[4][4]={ '1', '2', '3', 'A',
  31. '4', '5', '6', 'B',
  32. '7', '8', '9', 'C',
  33. '*', '0', '#', 'D'};
  34.  
  35. char scan_row[4]={0b00001110,0b00001101,0b00001011,0b00000111};
  36. unsigned char font[]={
  37. '0', '1','2','3','4','5','6','7','8','9'
  38. };
  39. char key_code='\0';
  40. unsigned char a=2;
  41. char sum;
  42. int stt=0;
  43. char tram,chuc,donvi;
  44. void Port_Init()
  45. {
  46. ANSEL=0;
  47. ANSELH=0;
  48.  
  49. TRISB=0;
  50. TRISC=0xf0;
  51. TRISD=0;
  52. TRISA=0;
  53. TRISE=0;
  54.  
  55. PORTA=0;
  56. PORTB=0;
  57. PORTC=0xff;
  58. PORTD=0;
  59. PORTE=0;
  60. }
  61. char scan_key()
  62. {
  63. char row=0;
  64.  
  65.  
  66. for(row=0;row<4;row++)
  67. {
  68. KEY = scan_row[row];
  69.  
  70. if(col_0==0)
  71. { while(col_0==0); return key_tab[row][0]; };
  72. if(col_1==0)
  73. { while(col_1==0); return key_tab[row][1]; };
  74. if(col_2==0)
  75. { while(col_2==0); return key_tab[row][2]; };
  76. if(col_3==0)
  77. { while(col_3==0); return key_tab[row][3]; };
  78. }
  79. return '\0';
  80. }
  81. void delay_x100ms(char time)
  82. {
  83.  
  84. while(time--)
  85. {
  86. __delay_ms(100);
  87. }
  88. }
  89. // Thay doi don vi hien thi
  90. void nuta()
  91. {
  92. char befor;
  93. befor =key_code;
  94. lcd_command(_LCD_CLEAR);
  95. //Bien dem a tang them 1
  96. if(befor=a) a++;
  97. lcd_goto_row_col(0,0);
  98. if(a%2==0) //Hien don vi la giay
  99. while(1)
  100. {
  101. lcd_command(_LCD_CLEAR);
  102. lcd_goto_row_col(0,0);
  103. lcd_write_string("Don Vi: Giay");
  104. lcd_goto_row_col(1,0);
  105. lcd_write_string("Thoi Gian");
  106. key_code = scan_key();
  107. if((key_code != 'A')&&(key_code != '1')&&(key_code != 'B')&&(key_code != 'C')&&(key_code != '2')&&(key_code != '3')&&(key_code != '4')&&(key_code != '5')
  108. &&(key_code != '6')&&(key_code != '7')&&(key_code != '0')&&(key_code != '8')&&(key_code != '9'))return;
  109. delay_x100ms(1);
  110.  
  111. }
  112. //Hien thi don vi la phut
  113. if(a%2!=0){
  114. lcd_command(_LCD_CLEAR);
  115. lcd_goto_row_col(0,0);
  116. lcd_write_string("Don Vi: Phut");
  117. lcd_goto_row_col(1,0);
  118. lcd_write_string("Thoi Gian");
  119. key_code = scan_key();
  120. if((key_code != 'A')&&(key_code != '1')&&(key_code != 'B')&&(key_code != 'C')&&(key_code != '2')&&(key_code != '3')&&(key_code != '4')&&(key_code != '5')
  121. &&(key_code != '6')&&(key_code != '7')&&(key_code != '0')&&(key_code != '8')&&(key_code != '9'))return;
  122. delay_x100ms(1);
  123.  
  124. }
  125. //------------ Lay ma PHIM -----------------------------
  126. key_code = scan_key();
  127. if((key_code != 'A')&&(key_code != '1')&&(key_code != 'B')&&(key_code != 'C')&&(key_code != '2')&&(key_code != '3')&&(key_code != '4')&&(key_code != '5')
  128. &&(key_code != '6')&&(key_code != '7')&&(key_code != '0')&&(key_code != '8')&&(key_code != '9'))return;
  129.  
  130.  
  131. }
  132. //Ham chuyen phim bam thanh so Int
  133. int convToInt(char key){
  134. int x;
  135. switch(key){
  136. case'0':x= 0;break;
  137. case'1':x= 1;break;
  138. case'2': x= 2;break;
  139. case'3': x=3;break;
  140. case'4':x= 4;break;
  141. case'5': x= 5;break;
  142. case'6': x= 6;break;
  143. case'7': x= 7;break;
  144. case'8':x= 8;break;
  145. case'9': x= 9;break;
  146.  
  147.  
  148. }
  149. return x;
  150. }
  151. //delay theo giay
  152. delay_second(){
  153. int j=10;
  154. while(j>0){
  155. __delay_ms(100);
  156. j--;
  157. }
  158. }
  159. //Delay theo phut
  160. delay_minute(){
  161. int j=60;
  162. while(j>0){
  163. delay_second();
  164. j--;
  165. }
  166. }
  167. void sw_delay(){
  168. //delay theo phut
  169. if(a%2!=0) delay_minute();
  170. if(a%2==0) delay_second();
  171.  
  172. }
  173. // Nhap 3 so tu ban phim
  174. void nhapphim(){
  175.  
  176. char befor;
  177. stt++;
  178. befor =key_code;
  179. //In 3 so ra man hinh
  180. while(1){
  181. // So dau tien
  182. if(stt==1){
  183. lcd_goto_row_col(1,11);
  184. lcd_write_char(befor);
  185. tram=convToInt(befor);
  186. }
  187. // SO thu 2
  188. if(stt==2){
  189. lcd_goto_row_col(1,12);
  190. lcd_write_char(befor);
  191. chuc=convToInt(befor);
  192. }
  193. //So thu 3
  194. if(stt==3){
  195.  
  196. lcd_goto_row_col(1,13);
  197. lcd_write_char(befor);
  198. donvi=convToInt(befor);
  199. }
  200.  
  201. key_code = scan_key();
  202. if((key_code != 'A')&&(key_code != '1')&&(key_code != 'B')&&(key_code != 'C')&&(key_code != '2')&&(key_code != '3')&&(key_code != '4')&&(key_code != '5')
  203. &&(key_code != '6')&&(key_code != '7')&&(key_code != '0')&&(key_code != '8')&&(key_code != '9'))return;
  204. }
  205. for(int i=0;i<3;i++){
  206.  
  207. }
  208.  
  209. }
  210.  
  211.  
  212. //Ham dem nguoc dong ho
  213. void demNguoc(){
  214. char befor;
  215. int so=tram*100+chuc*10+donvi;
  216. int i,j,k;
  217. int temp1,temp2,temp3;
  218. befor =key_code;
  219. int i,j,k;
  220. while(1)
  221. {
  222. while(so>=0){
  223. //Tinh so hang chuc,tram, don vi
  224. temp1=so%10;
  225. temp2=(so/10)%10;
  226. temp3=so/100;
  227. lcd_goto_row_col(1,13);
  228. lcd_write_char(font[temp1]);
  229. lcd_goto_row_col(1,12);
  230. lcd_write_char(font[temp2]);
  231. lcd_goto_row_col(1,11);
  232. lcd_write_char(font[temp3]);
  233. sw_delay();
  234. so--;
  235. }
  236. }
  237.  
  238. key_code = scan_key();
  239. if((key_code != 'A')&&(key_code != '1')&&(key_code != 'B')&&(key_code != 'C')&&(key_code != '2')&&(key_code != '3')&&(key_code != '4')&&(key_code != '5')
  240. &&(key_code != '6')&&(key_code != '7')&&(key_code != '8')&&(key_code != '9'))return;
  241. delay_x100ms(1);
  242. }
  243. void xoaphim(){
  244. chuc=0,donvi=0,tram=0;
  245. char befor;
  246. befor =key_code;
  247. lcd_command(_LCD_CLEAR);
  248. lcd_goto_row_col(0,0);
  249. stt=0;
  250. if(a%2==0) //Hien don vi la giay
  251. while(1)
  252. {
  253. lcd_command(_LCD_CLEAR);
  254. lcd_goto_row_col(0,0);
  255. lcd_write_string("Don Vi: Giay");
  256. lcd_goto_row_col(1,0);
  257. lcd_write_string("Thoi Gian");
  258. key_code = scan_key();
  259. if((key_code != 'A')&&(key_code != '1')&&(key_code != 'B')&&(key_code != 'C')&&(key_code != '2')&&(key_code != '3')&&(key_code != '4')&&(key_code != '5')
  260. &&(key_code != '6')&&(key_code != '7')&&(key_code != '0')&&(key_code != '8')&&(key_code != '9'))return;
  261. delay_x100ms(1);
  262.  
  263. }
  264. if(a%2!=0){
  265. lcd_command(_LCD_CLEAR);
  266. lcd_goto_row_col(0,0);
  267. lcd_write_string("Don Vi: Phut");
  268. lcd_goto_row_col(1,0);
  269. lcd_write_string("Thoi Gian");
  270. key_code = scan_key();
  271. if((key_code != 'A')&&(key_code != '1')&&(key_code != 'B')&&(key_code != 'C')&&(key_code != '2')&&(key_code != '3')&&(key_code != '4')&&(key_code != '5')
  272. &&(key_code != '6')&&(key_code != '7')&&(key_code != '0')&&(key_code != '8')&&(key_code != '9'))return;
  273. delay_x100ms(1);
  274.  
  275. }
  276.  
  277. //------------ Lay ma PHIM -----------------------------
  278. key_code = scan_key();
  279. if((key_code != 'A')&&(key_code != '1')&&(key_code != 'B')&&(key_code != 'C')&&(key_code != '2')&&(key_code != '3')&&(key_code != '4')&&(key_code != '5')
  280. &&(key_code != '6')&&(key_code != '7')&&(key_code != '8')&&(key_code != '9'))return;
  281.  
  282.  
  283. }
  284.  
  285. void esc()
  286. {
  287. char befor ;
  288. befor = key_code;
  289. while(1)
  290. {
  291. lcd_command(_LCD_CLEAR);
  292. //------------ Lay ma PHIM -----------------------------
  293. key_code = scan_key();
  294. if((key_code != 'A')&&(key_code != '1')&&(key_code != 'B')&&(key_code != 'C')&&(key_code != '2')&&(key_code != '3')&&(key_code != '4')&&(key_code != '5')
  295. &&(key_code != '6')&&(key_code != '7')&&(key_code != '8')&&(key_code != '9'))return;
  296. }
  297. }
  298. void main()
  299. {
  300. Port_Init();
  301. lcd_4bit_init();
  302. char befor;
  303. befor = key_code;
  304. lcd_command(_LCD_CLEAR);
  305. lcd_goto_row_col(0,0);
  306. lcd_write_string("Don Vi:");
  307. lcd_goto_row_col(1,0);
  308. lcd_write_string("Thoi Gian");
  309.  
  310. while(1)
  311. {
  312. while((key_code != 'A')&&(key_code != '1')&&(key_code != 'B')&&(key_code != 'C')&&(key_code != '2')&&(key_code != '3')&&(key_code != '4')&&(key_code != '5')
  313. &&(key_code != '6')&&(key_code != '0')&&(key_code != '7')&&(key_code != '8')&&(key_code != '9'))
  314. {
  315. key_code=scan_key();
  316. }
  317.  
  318. switch(key_code)
  319. {
  320. case 'A': nuta(); break;
  321. case 'B':xoaphim();break;
  322. case'C':demNguoc();break;
  323. default: nhapphim();break;
  324.  
  325. }
  326.  
  327.  
  328. }
  329. }
Advertisement
Add Comment
Please, Sign In to add comment