Chương trình đơn giản thôi ha. Các bạn có thể download project về tham khảo.
Mạch bao gồm 2 nút nhấn và 1 led 7seg CC chung sơ đồ như hình bên dưới.
Giải thích 1 tý về ý nghĩa các đoạn code cho các bạn hiểu hơn về nó nhá.
- Đoạn này là phần khai báo các thư viện cho một chương trình.
#include <stdio.h>
#include <stdlib.h>
#include "xc.h"
- Đây là đoạn code khai báo tuần số thạch anh dùng trong chương trình, chương trình nào cũng phải có.
#define _XTAL_FREQ 8000000
unsigned char const SEGMENT_MAP[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void main(void) {
ADCON1=0x07; // bo chế độ ADC
TRISB = 0x00; // cho portb là output
TRISA0= 1; // cho chân ra0 là input
TRISA1 = 1; // chân ra1 là input
char digit=0; khai báo digit
while(1){
- Đây là đoạn chương trình dùng để tăng giá trị led lên 1 đơn vị.
if (!RA0) // kiểm tra xem nút nhấn có được nhấn hay không
{
__delay_ms(100); //wait for 100ms
if (!RA0) //
{
PORTB = (SEGMENT_MAP[digit]);
__delay_ms(100); //Delay 1 second
digit++;
if (digit>9)
digit=0;
}
}
- Đâu là đoạn chương trình dùng để giảm giá trị led đi 1 đơn vị.
else
{
PORTB = (SEGMENT_MAP[digit]);
}
if (!RA1) //Check if switch SW1 is closed
{
__delay_ms(100); //wait for 100ms
if (!RA1) //Check if switch SW1 is still closed
{
PORTB = (SEGMENT_MAP[digit]);
__delay_ms(100); //Delay 1 second
digit--;
if (digit==0)
digit=9;
}
}
}
}
Mạch bao gồm 2 nút nhấn và 1 led 7seg CC chung sơ đồ như hình bên dưới.
Giải thích 1 tý về ý nghĩa các đoạn code cho các bạn hiểu hơn về nó nhá.
- Đoạn này là phần khai báo các thư viện cho một chương trình.
#include <stdio.h>
#include <stdlib.h>
#include "xc.h"
- Đây là đoạn code khai báo tuần số thạch anh dùng trong chương trình, chương trình nào cũng phải có.
#define _XTAL_FREQ 8000000
- Là phần chương trình chính của chúng ta.
void main(void) {
ADCON1=0x07; // bo chế độ ADC
TRISB = 0x00; // cho portb là output
TRISA0= 1; // cho chân ra0 là input
TRISA1 = 1; // chân ra1 là input
char digit=0; khai báo digit
while(1){
- Đây là đoạn chương trình dùng để tăng giá trị led lên 1 đơn vị.
if (!RA0) // kiểm tra xem nút nhấn có được nhấn hay không
{
__delay_ms(100); //wait for 100ms
if (!RA0) //
{
PORTB = (SEGMENT_MAP[digit]);
__delay_ms(100); //Delay 1 second
digit++;
if (digit>9)
digit=0;
}
}
- Đâu là đoạn chương trình dùng để giảm giá trị led đi 1 đơn vị.
else
{
PORTB = (SEGMENT_MAP[digit]);
}
if (!RA1) //Check if switch SW1 is closed
{
__delay_ms(100); //wait for 100ms
if (!RA1) //Check if switch SW1 is still closed
{
PORTB = (SEGMENT_MAP[digit]);
__delay_ms(100); //Delay 1 second
digit--;
if (digit==0)
digit=9;
}
}
}
}
Link download project.
EmoticonEmoticon