ADC For Pic đo và hiển thị điện áp lên LCD

ADC For Pic  đo và hiển thị  điện áp  lên LCD  từ 0 đến 5v  thông qua biến trở R7 qua chân RA3 (AN3) của pic

Chương trình như sau :

  • Khi cấp nguồn 8 led sáng đuổi 3 lần đồng thời LCD hiển thị : Wellcome to ADC Testing
  • Sau đó 2 s LCD hiện thị  Press SW4 to begin , chờ nhấn nút SW4 để vào chương trình
  • Sau khi ta nhấn SW4 Thì sẽ hiện thị nhiệt độ đo được từ RA3 
  • Trong khi hoạt động nhấn SW5 thì Sẽ kết thúc chương trình
  • Nhấn SW6 để hệ thống hoạt động trở lại




Code chương trình MPlab hitech c
  1. Chương trình chính :

#include <htc.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include "lcd.h"
#include "led.h"

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

__CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS);
#define _XTAL_FREQ 4000000

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

const char dat_line1[] = "   Welcome To   ";   // Noi dung can hien thi - Hang 1.
const char dat_line2[] = "  ADC  Testing  ";   // Noi dung can hien thi - Hang 2.
const char dat_line3[] = "   Press  SW4   ";
const char dat_line4[] = "    TO BEGIN    ";
char dat_line5[] =       " Vin=      (mV) ";
const char dat_line6[] = "     Bye Bye    ";
const char dat_line7[] = "  SEE YOU AGAIN ";
const char dat_line8[] = "                "; //Noi dung hien thi tat LDC
unsigned int xuat,giatri,A=0;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//HAM TINH GIA TRI ADC. CHUYEN VE TRAI(LAY 8 BIT CAO VA 2 BIT THAP)
unsigned long ReadADC() // CTC thuc hien chuyen doi AD va tra ve ket qua ADC.
{
__delay_us(5); // Cho ADC thuc hien lay mau.
GODONE = 1; // Bat dau thuc hien chuyen doi AD.
while(GODONE); // Cho ADC thuc hien chuyen doi xong.
// Tra ve ket qua ADC sau khi chuyen doi xong.
return ((((unsigned int)ADRESH)<<8)|ADRESL); // Ghep byte thap va byte cao cua gia tri ADC.
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//HAM KHOI TAO ADC. DAT CAU HINH CHO ADC
void ADC_init(void)
{
ANSEL = 0; // Cau hinh tat ca chan Analog la chan Digital I/O.
ANSELH = 0;
ANS3 = 1; // Cau hinh chan RA<3> la ngo vao Analog (Kenh 3).
ADCON1 = 0; // Khoi dong thanh ghi ADCON1.
ADFM = 1; // Dinh dang 10 bit ket qua chuyen doi AD (canh phai -> LSB).
// ADRESH = **** **xx : ADRESL = xxxx xxxx.
// Chon dien ap chuan cho ADC la Vref- = VSS va Vref+ = VDD .
VCFG1 = 0;
VCFG0 = 0;


ADCS0 = 1; // Chon xung clock chuyen doi AD tu mach RC trong chip.
ADCS1 = 0;
CHS0 = 1; // Chon kenh chuyen doi AD la AN3.
CHS1 = 1;
CHS2 = 0; // Chon kenh chuyen doi AD la AN3.
CHS3 = 0;
ADON = 1; // Cho phep ADC hoat dong.
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ledsangduoi(void)
{
 
for(int i=0;i<=1;i++)
{
TRISB3=0;
RB3 = 1;
__delay_ms(100);
TRISB4=0;
RB4 = 0;

}
}
void ledsangduoi0(void)
{
 
for(int i=0;i<=1;i++)
{
TRISB3=0;
RB3 = 0;
__delay_ms(100);
TRISB4=0;
RB4 = 1;
}
}
void ledsangduoi1(void)
{
for(int i=0;i<=1;i++)
{
TRISB3=1;
TRISB4=0;
RB4 = 1;
__delay_ms(100);
TRISB5=0;
RB5 = 0;
}
}
void ledsangduoi2(void)
{
for(int i=0;i<=1;i++)
{
TRISB3=1;
TRISB4=0;
RB4 = 0;
__delay_ms(100);
TRISB5=0;
RB5 = 1;
}
}
void ledsangduoi3(void)
{
for(int i=0;i<=1;i++)
{
TRISB3=0;
TRISB4=1;
RB3 = 0;
__delay_ms(100);
TRISB5=0;
RB5 = 1;
}
}
void ledsangduoi4(void)
{
for(int i=0;i<=1;i++)
{
TRISB3=0;
TRISB4=1;
RB3 = 1;
__delay_ms(100);
TRISB5=0;
RB5 = 0;
}
}
void board_init();
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// HAM CHINH
void main()
{
lcd_init(); // Khoi dong LCD theo cau hinh 4 bit.
ADC_init();
board_init();
LAI:

//XUAT HIEN CHU TREN MAN HINH LCD
for(int i=0;i<=16;i++)
   {
    lcd_gotoxy(i,0);
    lcd_putc(dat_line1[i-1]);
    lcd_gotoxy(i,1);
    lcd_putc(dat_line2[i-1]);
   }
for( int i=0;i<=2;i++)
{
ledsangduoi();
ledsangduoi0();
ledsangduoi1();
ledsangduoi2();
ledsangduoi3();
ledsangduoi4();
}

for(int i=0;i<=16;i++)
   {
    lcd_gotoxy(i,0);
    lcd_putc(dat_line3[i-1]);
    lcd_gotoxy(i,1);
    lcd_putc(dat_line4[i-1]);
   }
__delay_ms(100);
__delay_ms(100);

// PHAI KICH HOAT DIEN TRO KEO LEN NOI BEN TRONG PPIC16887 DE VIET CAC CHUONG TRINH BEN DUOI(RB0-RB2 SANG)
//
RBPU = 0; // Kich hoat tinh nang Pull-up.
WPUB = 0x07; // Kich hoat tinh nang Weak Pull-up (RB0).

while(!(SW4)); //KIEM TRA XEM NO CO DC AN HAY KHONG. NEU DC AN THI THOAT KHOI VONG CHO
if(SW4)
A=1;
while(A=1)
{
for(int i=1;i<=16;i++)
    {
   lcd_gotoxy(i,0);
   lcd_putc(dat_line2[i-1]);
   lcd_gotoxy(i,1);
   lcd_putc(dat_line5[i-1]);
    }
xuat = ReadADC();
giatri = (double)(xuat*4.9); //Dong lenh dung de ep kieu Int ve Double de tính cho GAN dúng
dat_line5[6]=(giatri/1000)+48; //CONG VOI +48 DE CHUYEN TU KIEU INT VE KIEU CHAR(BANG ASCII)
dat_line5[7]=(giatri%1000/100)+48;
dat_line5[8]=(((giatri%1000)%100)/10)+48;
dat_line5[9]=(((giatri%1000)%100)%10)+48;

for(int i=1;i<=16;i++)
    {
    lcd_gotoxy(i,0);
    lcd_putc(dat_line2[i-1]);
    lcd_gotoxy(i,1);
    lcd_putc(dat_line5[i-1]);
    }

if(SW5)
{
A=2;
goto out;
}
}
out:
for(int i=0;i<=16;i++)
    {
  lcd_gotoxy(i,0);
lcd_putc(dat_line6[i-1]);
     lcd_gotoxy(i,1);
       lcd_putc(dat_line7[i-1]);
    }
for(int i=0;i<=2;i++)
{
ledsangduoi4();
ledsangduoi3();
ledsangduoi2();
ledsangduoi1();
ledsangduoi0();
ledsangduoi();
}


for(int i=0;i<=16;i++)
   {
    lcd_gotoxy(i,0);
    lcd_putc(dat_line8[i-1]);
    lcd_gotoxy(i,1);
    lcd_putc(dat_line8[i-1]);
   }
while(!(SW6)); //vaong lap cho xy ly tiep theo

}
void board_init()
{
// Khai bao bien.

// Dinh nghia ham.

// LED va nut bam.
led_button_init();

// LCD.

// EEPROM.
// Cau hinh ngat Timer0 de su dung cho mTouch va LED - Nut nhan.
TMR0 = 0;
PSA = 0;
OPTION &= 0b11000111;
T0IF = 0;
T0IE = 1;
PEIE = 1;
GIE = 1;
}

void interrupt isr()
{
// Khai bao bien.
int i;

// Dinh nghia ham.

if(T0IF && T0IE) // Xu ly neu co ngat Timer0 - Kiem tra LED va mTouch.
i++;
if(i=500000)
{
led_button_scan(); // Kiem tra LEd.
TMR0 = 0;
T0IF = 0;
}
}

 

  1. Chương trình LCD hiển thị theo kiểu 4 bit:
// ***************************************************
// Cong dung: 
// Chuong trinh su dung cac lenh de thuc hien viec dieu khien va hien thi cac
// thong tin len man hinh LCD 2x16 duoc ket noi voi PIC theo kieu 4 bit
// du lieu va 3 bit dieu khien.
//
// Cot 0              15
//       [----------------]
// Hang 0 [                ]
// Hang 1 [                ]
//   [----------------]
//
// Lenh lcd_init(): Khoi dong LCD. 
// Lenh lcd_busy(): Thong bao LCD ban xu ly thong tin.
// Lenh lcd_get_byte(rs): Doc mot byte du lieu tu LCD.
// Lenh lcd_put_byte(rs, b): Ghi mot byte du lieu/lenh den LCD.
// Lenh lcd_putc(c): Ghi mot ky tu den LCD.
// Lenh lcd_gotoxy(col, row): Dinh toa do tren LCD.
// Lenh lcd_puts(*s): Ghi mot chuoi den LCD.
// Lenh lcd_cgram(): Luu cac ma ky tu dac biet vao vung nho CGRAM cua LCD.
//
// Ket noi LCD: RD<1> -> LCD_RS   RD<4> -> LCD_DATA4.
// RD<2> -> LCD_RW   RD<5> -> LCD_DATA5.
// RD<3> -> LCD_EN   RD<6> -> LCD_DATA6.
// RD<7> -> LCD_DATA7.
//
// Luu y: Cach ket noi va cac lenh dung cho LCD xem them trong file lcd.h
//
// Hieu chinh va bo sung: PHAM QUANG TRI - Ho Chi Minh University of Industry.
//
// *************************************************** 
#include <stdlib.h>
#include <ctype.h>
#include "lcd.h" // Cau hinh ket noi va khai bao lenh dung cho LCD.

// ***************************************************
// Ten CTC: lcd_init().
// Thong so dau vao: Xem cach ket noi phan cung LCD nhu tren.
// Thong so dau ra:
// Cong dung:     Khoi dong LCD theo cau hinh 4 bit du lieu.
// ***************************************************
void lcd_init()
{
// Khai bao bien.
unsigned char i;

// Dinh nghia ham.  
LCD_EN_TRIS = 0; // Cau hinh ngo ra cac duong dieu khien.
LCD_RS_TRIS = 0;
LCD_RW_TRIS = 0;

LCD_DATA4_TRIS = 0; // Cau hinh ngo ra cho cac duong du lieu.
LCD_DATA5_TRIS = 0;
LCD_DATA6_TRIS = 0;
LCD_DATA7_TRIS = 0;

LCD_EN = 0; // EN = 0 - Disable.
LCD_RS = 0; // RS = 0 - Command.
LCD_RW = 0; // RW = 0 - Write.

__delay_ms(100); // Tao thoi gian tre khi bat nguon cho LCD.
// Reset LCD.
lcd_put_byte(0,0x30);
__delay_ms(50);
lcd_put_byte(0,0x30);
__delay_ms(50);
lcd_put_byte(0,0x32);
__delay_ms(100); // Tao tre de reset LCD.
__delay_ms(100); // 
__delay_ms(100); // 
while(lcd_busy());
lcd_put_byte(0,FOUR_BIT & LINES_5X7); // Thiet lap loai LCD.
while(lcd_busy());
lcd_put_byte(0,DOFF&CURSOR_OFF&BLINK_OFF); // Tat hien thi.
while(lcd_busy());
lcd_put_byte(0,DON&CURSOR_OFF&BLINK_OFF); // Bat hien thi.
while(lcd_busy());
lcd_put_byte(0,0x01); // Xoa hien thi va di chuyen con tro ve dau dong.
while(lcd_busy());
lcd_put_byte(0,SHIFT_CUR_LEFT); // Che do dich chuyen con tro.
while(lcd_busy());
lcd_put_byte(0,0x01); // Xoa hien thi va di chuyen con tro ve dau dong.
while(lcd_busy());
}

// ***************************************************
// Ten CTC: lcd_busy().
// Thong so dau vao:
// Thong so dau ra: Tra ve gia tri: <0> Khong ban  -  <1> Bao ban.
// Cong dung:     Thong bao LCD dang ban xu ly thong tin.
// ***************************************************
unsigned char lcd_busy()
{
// Khai bao bien.
unsigned char busy;

// Dinh nghia ham.
LCD_DATA4_TRIS = 1; // Cau hinh ngo vao cho cac duong du lieu.
LCD_DATA5_TRIS = 1;
LCD_DATA6_TRIS = 1;
LCD_DATA7_TRIS = 1;
LCD_RW = 1; // RW = 1 - Read.
LCD_RS = 0; // RS = 0 - Command.
__delay_us(20);
LCD_EN = 1; // EN = 1 - Enable.
__delay_us(20);
busy = LCD_DATA7; // Doc gia tri co bao ban tu LCD.
LCD_EN = 0; // EN = 0 - Disable.
__delay_us(20);
LCD_EN = 1; // EN = 1 - Enable. Tao xung truyen thong tin.
__delay_us(20);
LCD_EN = 0; // EN = 0 - Disable.
return busy; // Tra ve gia tri bao LCD ban hay khong (1: Busy).
}

// ***************************************************
// Ten CTC: lcd_get_byte(rs).
// Thong so dau vao: rs: Chon lua doc lenh (Command) hay du lieu (Data) tu LCD.
// rs = 0: Command   -   rs = 1: Data.
// Can xac dinh toa do du lieu can doc tu LCD truoc ham nay.
// Thong so dau ra: Gia tri byte doc duoc tu LCD.
// Cong dung:     Doc 1 byte tu LCD tai toa do xac dinh tu truoc.
// ***************************************************
unsigned char lcd_get_byte(unsigned char rs)
{
// Khai bao bien.
BYTE_VAL b; // Bien chua gia tri doc ve tu LCD. 

// Dinh nghia ham.
LCD_DATA4_TRIS = 1; // Cau hinh ngo vao cho cac duong du lieu.
LCD_DATA5_TRIS = 1;
LCD_DATA6_TRIS = 1;
LCD_DATA7_TRIS = 1;
LCD_RW = 1; // RW = 1 - Read.
LCD_RS = 0; // RS = 0 - Command. Mac dinh la doc Command.
if (rs) LCD_RS = 1; // Kiem tra yeu cau doc Data (rs = 1) hay doc Command (rs = 0).
// RS = 1 - Data. Neu chon lua doc Data.
__delay_us(20);
LCD_EN = 1; // EN = 1 - Enable. Doc 4 bit cao cua thong tin can doc tu LCD.
__delay_us(20);
b.bits.b7 = LCD_DATA7; // Doc 4 bit cao.
b.bits.b6 = LCD_DATA6;
b.bits.b5 = LCD_DATA5;
b.bits.b4 = LCD_DATA4;
LCD_EN = 0; // EN = 0 - Disable.
__delay_us(20);
LCD_EN = 1; // EN = 1 - Enable. Doc 4 bit thap cua thong tin can doc tu LCD.
__delay_us(20);
b.bits.b3 = LCD_DATA7; // Doc 4 bit thap.
b.bits.b2 = LCD_DATA6;
b.bits.b1 = LCD_DATA5;
b.bits.b0 = LCD_DATA4;
LCD_EN = 0; // EN = 0 - Disable.
return b.Val; // Tra ve gia tri doc duoc tu LCD (8 bit).
}

// ***************************************************
// Ten CTC: lcd_put_byte(rs, b).
// Thong so dau vao: rs: Chon lua doc lenh (Command) hay du lieu (Data) tu LCD.
// rs = 0: Command   -   rs = 1: Data.
// b: Gia tri 8 bit cua thong tin can ghi vao LCD.
// Can xac dinh toa do du lieu can doc tu LCD truoc ham nay.
// Thong so dau ra:
// Cong dung:     Ghi 1 byte vao LCD tai toa do xac dinh tu truoc.
// ***************************************************
void lcd_put_byte(unsigned char rs, unsigned char b)
{
// Khai bao bien.
BYTE_VAL temp; // Bien luu tam thong tin.

// Dinh nghia ham.
LCD_DATA4_TRIS = 0; // Cau hinh ngo ra cho cac duong du lieu.
LCD_DATA5_TRIS = 0;
LCD_DATA6_TRIS = 0;
LCD_DATA7_TRIS = 0;
LCD_RS = 0; // RS = 0 - Command. Mac dinh la ghi Command.
if(rs) LCD_RS = 1; // Kiem tra yeu cau ghi Data (rs = 1) hay ghi Command (rs = 0).
// RS = 1 - Data. Neu chon lua ghi Data.
__delay_us(20);
LCD_RW = 0; // RW = 0 - Write.
__delay_us(20);
LCD_EN = 0; // EN = 0 - Disable.
temp.Val = b; // Lay gia tri thong tin can ghi vao LCD.
LCD_DATA4 = temp.bits.b4; // Gui 4 bit cao len bus.
LCD_DATA5 = temp.bits.b5;
LCD_DATA6 = temp.bits.b6;
LCD_DATA7 = temp.bits.b7;

__delay_us(20);
LCD_EN =  1; // EN = 1 - Enable. Ghi 4 bit cao cua thong tin vao LCD.
__delay_us(20);
LCD_EN = 0; // EN = 0 - Disable.

LCD_DATA4 = temp.bits.b0; // Gui 4 bit thap len bus.
LCD_DATA5 = temp.bits.b1;
LCD_DATA6 = temp.bits.b2;
LCD_DATA7 = temp.bits.b3;

__delay_us(20);
LCD_EN =  1; // EN = 1 - Enable. Ghi 4 bit thap cua thong tin vao LCD.
__delay_us(20);
LCD_EN = 0; // EN = 0 - Disable.
}

// ***************************************************
// Ten CTC: lcd_putc(c).
// Thong so dau vao: c: Lenh dieu khien va thong tin hien thi.
// /f: Xoa hien thi.
// /n: Bat dau dong moi.
// /b: Lui ve 1 vi tri.
// Mac dinh la hien thi cac ky tu co kha nang hien thi duoc.
// Thong so dau ra:
// Cong dung:     Hien thi ky tu va dieu khien cac chuc nang hoat dong cua LCD.
// ***************************************************
void lcd_putc(char c)
{
// Khai bao bien.

// Dinh nghia ham.
switch(c)
{
case '\f': // Chuc nang xoa hien thi.
lcd_put_byte(0,0x01); // Goi ham truyen thong tin (lenh) sang C.LCD.
while(lcd_busy()); // Kiem tra LCD bao ban.
break; // Lenh: Xoa hien thi tren man hinh C.LCD (0x01).
case '\n': // Chuc nang bat dau hang thu 2.
lcd_gotoxy(0,1); // Goi ham truyen thong tin (du lieu) sang C.LCD.
break;
    case '\b': // Chuc nang lui ve 1 vi tri.
lcd_put_byte(0,0x10); // Goi ham truyen thong tin (lenh) sang C.LCD. 
while(lcd_busy()); // Kiem tra LCD bao ban.
break; // Lenh: Doi con tro sang trai (0x10).
default: // Hien thi tat ca ky tu mac dinh trong LCD (c: dia chi HEX cua ky tu)
// if(isprint(c)) // Dong lenh dung khi chi muon hien thi nhung ky tu tren ban phim PC?
// {
lcd_put_byte(1,c); // Gui thong tin sang LCD de hien thi tai toa do da xac dinh.
while(lcd_busy()); // Kiem tra LCD bao ban.
// }
break;
}
}

// ***************************************************
// Ham duoi day duoc su dung de cho phep xuat thong tin ra LCD bang
// lenh printf().
// ***************************************************
void putch(char c)
{
lcd_putc(c);
}

// ***************************************************
// Ten CTC: lcd_gotoxy(col, row).
// Thong so dau vao: col: Toa do cot hien thi (0 - 15).
// row: Toa do hang hien thi (0 - 1).
// Thong so dau ra:
// Cong dung:     Xac dinh toa do hien thi thong tin tren LCD.
// ***************************************************
void lcd_gotoxy(unsigned char col, unsigned char row)
{
// Khai bao bien.
unsigned char address;

// Dinh nghia ham.
if(row!=0) // Kiem tra hang hien thi de tao dia chi hien thi hang. 
address=0x40; // Ma dieu khien hien thi hang 2.
else
address=0x00; // Ma dieu khien hien thi hang 1.
address += col; // Ket hop gia tri hang va cot de tao ra dia chi hien thi.

lcd_put_byte(0,0x80|address); // Gui lenh xac dinh toa do hien thi tren LCD.

while(lcd_busy()); // Kiem tra LCD bao ban.
}

// ***************************************************
// Ten CTC: lcd_puts(*s).
// Thong so dau vao: s: Chuoi thong tin can hien thi.
// Thong so dau ra:
// Cong dung: Hien thi chuoi thong tin len LCD.
// ***************************************************
void lcd_puts(const char *s)
{
// Khai bao bien.

// Dinh nghia ham.
while(*s)
{
lcd_putc(*s++);
}
}

3. Chương trình quét led và bàn phím 
#define _LEGACY_HEADERS
#include <htc.h>
#include "led.h"

volatile LED led;
volatile bit SW4, SW5, SW6, SW7, SW8, SW9, SW10;

void led_button_init()
{
TRISB |= 0x07; // SW4, SW5, SW6
TRISA4 = 1; // SW7
TRISE |= 0b00000110;
ANSELH = 0;
WPUB = 0b00000111; // SW4, SW5, SW6
RBPU = 0;
led.val = 0;
}

void led_button_scan()
{
static unsigned char count;
PORTE |= 0b00000110;
TRISE |= 0b00000110;
TRISB |= 0b00111000; // turn all LEDs off
_delay(20);
// kiem tra phim bam
if(!RB0)SW4 = 1;
else SW4 = 0;
if(!RB1)SW5 = 1;
else SW5 = 0;
if(!RB2)SW6 = 1;
else SW6 = 0;
SW8=0;SW9=0;
if(!RA4)SW7 = 1;
else{
SW7 = 0;
RB3 = 0;TRISB3=0;
_delay(20);
if(!RA4)SW8 = 1;
else SW8 = 0;
TRISB3 = 1;
RB4 = 0;TRISB4=0;
_delay(20);
if(!RA4)SW9 = 1;
else SW9 = 0;
TRISB4 = 1;
RB5 = 0;TRISB5=0;
_delay(20);
if(!RA4)SW10 = 1;
else SW10 = 0;
TRISB5 = 1;
}
switch(count){
case 0:
if(led.bits.l0){
TRISE2 = 0;
}
case 1:
if(led.bits.l1){
TRISE1 = 0;
}
break;
case 2:
if(led.bits.l2){
TRISB3 = 0;
TRISB4 = 0;
RB3 = 1;
RB4 = 0;
}
break;
case 3:
if(led.bits.l3){
TRISB3 = 0;
TRISB4 = 0;
RB3 = 0;
RB4 = 1;
}
break;
case 4:
if(led.bits.l4){
TRISB4 = 0;
TRISB5 = 0;
RB4 = 1;
RB5 = 0;
}
break;
case 5:
if(led.bits.l5){
TRISB4 = 0;
TRISB5 = 0;
RB4 = 0;
RB5 = 1;
}
break;
case 6:
if(led.bits.l6){
TRISB3 = 0;
TRISB5 = 0;
RB3 = 0;
RB5 = 1;
}
break;
case 7:
if(led.bits.l7){
TRISB3 = 0;
TRISB5 = 0;
RB3 = 1;
RB5 = 0;
}
break;
}
count++;
if(count>7)count=0;
}

4. LED.h, LCD.h

LED.h:
#ifndef _LED_H_
#define _LED_H_

typedef union {
unsigned char val;
struct{
unsigned l0:1;
unsigned l1:1;
unsigned l2:1;
unsigned l3:1;
unsigned l4:1;
unsigned l5:1;
unsigned l6:1;
unsigned l7:1;
}bits;
} LED;

extern volatile LED led;
extern volatile bit SW4, SW5, SW6, SW7, SW8, SW9, SW10;

void led_button_scan();
void led_button_init();

#endif

LCD.h
#ifndef _LED_H_
#define _LED_H_

typedef union {
unsigned char val;
struct{
unsigned l0:1;
unsigned l1:1;
unsigned l2:1;
unsigned l3:1;
unsigned l4:1;
unsigned l5:1;
unsigned l6:1;
unsigned l7:1;
}bits;
} LED;

extern volatile LED led;
extern volatile bit SW4, SW5, SW6, SW7, SW8, SW9, SW10;

void led_button_scan();
void led_button_init();

#endif



Popular posts from this blog

Download mikroC PRO for PIC - Version 6.6.3 FULL

Stt Tháng tư Chào tháng Tư nhé!