/*
Project: mach dem san pham hien thi tren led 7 doan
Cmu: 16f877a
Description: Trong project ta su dung 1 button tren Rb0 de gia lap cam bien, khi
co mot san pham di qua cam bien tuong ung nhu button duoc an xuong, muc logic o port rb0
o muc thap, gia tri dem tang 1 don vi. Ngoai ra ta con co mot button reset lai gia tri
dem ve 0. Cac gia tri so dem se duoc ghi vao eeprom, khi co khoi dong lai he thong cung
khong so bi mat du lieu cu.
Author: http://dientudieukhien.net
*/
unsigned short mask(unsigned short num) {
switch (num) {
case 0 : return 0xC0;
case 1 : return 0xF9;
case 2 : return 0xA4;
case 3 : return 0xB0;
case 4 : return 0x99;
case 5 : return 0x92;
case 6 : return 0x82;
case 7 : return 0xF8;
case 8 : return 0x80;
case 9 : return 0x90;
} //case end
}
unsigned short digit_no, digit10, digit1, digit;
void interrupt() {
if (digit_no==0) {
PORTB.F7=0;
PORTB.F6 = 0; // Turn off all 7seg displays
PORTD = digit1; // send mask for ones digit to PORTD
PORTB.F7 = 1; // turn on 1st 7 seg., turn off 2nd
digit_no = 1;
} else {
PORTB.F6=0;
PORTB.F7 = 0; // Turn off all 7seg displays
PORTD = digit10; // send mask for tens digit to PORTD
PORTB.F6 = 1; // turn on 2nd 7 seg., turn off 1st
digit_no = 0;
}
TMR0 = 0; // clear TMRO
INTCON = 0x20; // clear TMR0IF and set TMR0IE
}
void display(unsigned short i){
unsigned short digit;
digit=i%10;
digit1=mask(digit); //hien thi hang don vi
digit=i/10;
digit10=mask(digit); // hien thi hang chuc
delay_ms(500);
}
void main() {
unsigned short i;
OPTION_REG = 0x80; // Timer0 settings
TMR0 = 0;
INTCON = 0xA0; // Disable PEIE,INTE,RBIE,T0IE
trisb=0x03;
trisd=0x00;
TRISA=0X00;
portb=0;
portd=0;
i=EEPROM_Read(5); //Doc gia tri tu eeprom
display(i); //Hien thi gia tri so dem ra led 7 doan
for(;;){ //Vong lap forever
lap:
i=EEPROM_Read(5); //Doc gia tri moi nhat tu eeprom
if(Button(&portb,0,1,0)){ //Neu port b0 duoc chuyen tu muc logic 1->0
i=i++; //Tang gia tri dem 1 don vi
display(i); //Hien thi gia tri dem ra led 7 doan
}
if(i>0){
if(Button(&portb,1,1,0)){ //Neu port b1 duoc chuyen tu muc logic 1->0
i=0; //Reset gia tri dem
display(i); //Hien thi ra led 7 doan
}
EEPROM_Write(5,i); //Cap nhat gia tri moi vao eeprom
Delay_ms(100);
} goto lap;
}
}