Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /******************************************************************************
- * Project : EX6 - KEYPAD LAB - LCD 4BIT
- * MCU : PIC16F887
- * Xtal : 4Mhz
- * Complier: Hitech PIC C V9.83
- * author: Pham van Thien
- *
- ******************************************************************************/
- #include <pic.h>
- #include "lcd_4bit.h"
- __CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & LVP_OFF & DEBUG_OFF &
- BOREN_OFF & CP_OFF & CPD_OFF & FCMEN_OFF & IESO_OFF); //1st config. word
- __CONFIG(BOR4V_BOR21V);
- #define _XTAL_FREQ 4000000
- //----------------------a-------------------------------------------------
- #define KEY PORTC //ket noi BAN PHIM 4x4
- #define LED_PORT PORTB
- #define col_0 RC4
- #define col_1 RC5
- #define col_2 RC6
- #define col_3 RC7
- char key_tab[4][4]={ '1', '2', '3', 'A',
- '4', '5', '6', 'B',
- '7', '8', '9', 'C',
- '*', '0', '#', 'D'};
- char scan_row[4]={0b00001110,0b00001101,0b00001011,0b00000111};
- unsigned char font[]={
- '0', '1','2','3','4','5','6','7','8','9'
- };
- char key_code='\0';
- unsigned char a=2;
- char sum;
- int stt=0;
- char tram,chuc,donvi;
- void Port_Init()
- {
- ANSEL=0;
- ANSELH=0;
- TRISB=0;
- TRISC=0xf0;
- TRISD=0;
- TRISA=0;
- TRISE=0;
- PORTA=0;
- PORTB=0;
- PORTC=0xff;
- PORTD=0;
- PORTE=0;
- }
- char scan_key()
- {
- char row=0;
- for(row=0;row<4;row++)
- {
- KEY = scan_row[row];
- if(col_0==0)
- { while(col_0==0); return key_tab[row][0]; };
- if(col_1==0)
- { while(col_1==0); return key_tab[row][1]; };
- if(col_2==0)
- { while(col_2==0); return key_tab[row][2]; };
- if(col_3==0)
- { while(col_3==0); return key_tab[row][3]; };
- }
- return '\0';
- }
- void delay_x100ms(char time)
- {
- while(time--)
- {
- __delay_ms(100);
- }
- }
- // Thay doi don vi hien thi
- void nuta()
- {
- char befor;
- befor =key_code;
- lcd_command(_LCD_CLEAR);
- //Bien dem a tang them 1
- if(befor=a) a++;
- lcd_goto_row_col(0,0);
- if(a%2==0) //Hien don vi la giay
- while(1)
- {
- lcd_command(_LCD_CLEAR);
- lcd_goto_row_col(0,0);
- lcd_write_string("Don Vi: Giay");
- lcd_goto_row_col(1,0);
- lcd_write_string("Thoi Gian");
- key_code = scan_key();
- 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')
- &&(key_code != '6')&&(key_code != '7')&&(key_code != '0')&&(key_code != '8')&&(key_code != '9'))return;
- delay_x100ms(1);
- }
- //Hien thi don vi la phut
- if(a%2!=0){
- lcd_command(_LCD_CLEAR);
- lcd_goto_row_col(0,0);
- lcd_write_string("Don Vi: Phut");
- lcd_goto_row_col(1,0);
- lcd_write_string("Thoi Gian");
- key_code = scan_key();
- 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')
- &&(key_code != '6')&&(key_code != '7')&&(key_code != '0')&&(key_code != '8')&&(key_code != '9'))return;
- delay_x100ms(1);
- }
- //------------ Lay ma PHIM -----------------------------
- key_code = scan_key();
- 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')
- &&(key_code != '6')&&(key_code != '7')&&(key_code != '0')&&(key_code != '8')&&(key_code != '9'))return;
- }
- //Ham chuyen phim bam thanh so Int
- int convToInt(char key){
- int x;
- switch(key){
- case'0':x= 0;break;
- case'1':x= 1;break;
- case'2': x= 2;break;
- case'3': x=3;break;
- case'4':x= 4;break;
- case'5': x= 5;break;
- case'6': x= 6;break;
- case'7': x= 7;break;
- case'8':x= 8;break;
- case'9': x= 9;break;
- }
- return x;
- }
- //delay theo giay
- delay_second(){
- int j=10;
- while(j>0){
- __delay_ms(100);
- j--;
- }
- }
- //Delay theo phut
- delay_minute(){
- int j=60;
- while(j>0){
- delay_second();
- j--;
- }
- }
- void sw_delay(){
- //delay theo phut
- if(a%2!=0) delay_minute();
- if(a%2==0) delay_second();
- }
- // Nhap 3 so tu ban phim
- void nhapphim(){
- char befor;
- stt++;
- befor =key_code;
- //In 3 so ra man hinh
- while(1){
- // So dau tien
- if(stt==1){
- lcd_goto_row_col(1,11);
- lcd_write_char(befor);
- tram=convToInt(befor);
- }
- // SO thu 2
- if(stt==2){
- lcd_goto_row_col(1,12);
- lcd_write_char(befor);
- chuc=convToInt(befor);
- }
- //So thu 3
- if(stt==3){
- lcd_goto_row_col(1,13);
- lcd_write_char(befor);
- donvi=convToInt(befor);
- }
- key_code = scan_key();
- 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')
- &&(key_code != '6')&&(key_code != '7')&&(key_code != '0')&&(key_code != '8')&&(key_code != '9'))return;
- }
- for(int i=0;i<3;i++){
- }
- }
- //Ham dem nguoc dong ho
- void demNguoc(){
- char befor;
- int so=tram*100+chuc*10+donvi;
- int i,j,k;
- int temp1,temp2,temp3;
- befor =key_code;
- int i,j,k;
- while(1)
- {
- while(so>=0){
- //Tinh so hang chuc,tram, don vi
- temp1=so%10;
- temp2=(so/10)%10;
- temp3=so/100;
- lcd_goto_row_col(1,13);
- lcd_write_char(font[temp1]);
- lcd_goto_row_col(1,12);
- lcd_write_char(font[temp2]);
- lcd_goto_row_col(1,11);
- lcd_write_char(font[temp3]);
- sw_delay();
- so--;
- }
- }
- key_code = scan_key();
- 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')
- &&(key_code != '6')&&(key_code != '7')&&(key_code != '8')&&(key_code != '9'))return;
- delay_x100ms(1);
- }
- void xoaphim(){
- chuc=0,donvi=0,tram=0;
- char befor;
- befor =key_code;
- lcd_command(_LCD_CLEAR);
- lcd_goto_row_col(0,0);
- stt=0;
- if(a%2==0) //Hien don vi la giay
- while(1)
- {
- lcd_command(_LCD_CLEAR);
- lcd_goto_row_col(0,0);
- lcd_write_string("Don Vi: Giay");
- lcd_goto_row_col(1,0);
- lcd_write_string("Thoi Gian");
- key_code = scan_key();
- 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')
- &&(key_code != '6')&&(key_code != '7')&&(key_code != '0')&&(key_code != '8')&&(key_code != '9'))return;
- delay_x100ms(1);
- }
- if(a%2!=0){
- lcd_command(_LCD_CLEAR);
- lcd_goto_row_col(0,0);
- lcd_write_string("Don Vi: Phut");
- lcd_goto_row_col(1,0);
- lcd_write_string("Thoi Gian");
- key_code = scan_key();
- 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')
- &&(key_code != '6')&&(key_code != '7')&&(key_code != '0')&&(key_code != '8')&&(key_code != '9'))return;
- delay_x100ms(1);
- }
- //------------ Lay ma PHIM -----------------------------
- key_code = scan_key();
- 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')
- &&(key_code != '6')&&(key_code != '7')&&(key_code != '8')&&(key_code != '9'))return;
- }
- void esc()
- {
- char befor ;
- befor = key_code;
- while(1)
- {
- lcd_command(_LCD_CLEAR);
- //------------ Lay ma PHIM -----------------------------
- key_code = scan_key();
- 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')
- &&(key_code != '6')&&(key_code != '7')&&(key_code != '8')&&(key_code != '9'))return;
- }
- }
- void main()
- {
- Port_Init();
- lcd_4bit_init();
- char befor;
- befor = key_code;
- lcd_command(_LCD_CLEAR);
- lcd_goto_row_col(0,0);
- lcd_write_string("Don Vi:");
- lcd_goto_row_col(1,0);
- lcd_write_string("Thoi Gian");
- while(1)
- {
- 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')
- &&(key_code != '6')&&(key_code != '0')&&(key_code != '7')&&(key_code != '8')&&(key_code != '9'))
- {
- key_code=scan_key();
- }
- switch(key_code)
- {
- case 'A': nuta(); break;
- case 'B':xoaphim();break;
- case'C':demNguoc();break;
- default: nhapphim();break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment