File Tổng Hợp Bài Tập Lớn Vi Xử Lý

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 96

HƯỚNG DẪN SỬ DỤNG VI XỬ LÝ:

BÀI 1:

/*
* File: newmain.c
* Author: BinhNGO
*
* Created on August 15, 2020, 5:14 PM
*/

#include<htc.h>

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

#define PIR RD0 //PIR Output is connected at PORTD.0

#define rs RC0
#define rw RC1
#define en RC2

Nguyễn Đức Hải


1
#define delay for(i=0;i<1000;i++)

int i;

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);

void main()
{
TRISB=TRISC0=TRISC1=TRISC2=0;
TRISD=0xff; //Port D act as Input
lcd_init();
cmd(0x80);
//show(" EmbeTronicX ");
show(" BinhNGO,UTC ");
while(1) {
if(PIR == 0) {
cmd(0xc0);
show("Intruder Detcted");
// sáng đèn, quay động cơ servo mở cửa
delay;delay;
} else {
cmd(0xc0);
show(" ");
}

Nguyễn Đức Hải


2
}
}

void lcd_init()
{
cmd(0x38);
cmd(0x0c);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
PORTB=a;
rs=0;
rw=0;
en=1;
delay;
en=0;
}

void dat(unsigned char b)


{
PORTB=b;
rs=1;
rw=0;
en=1;
delay;

Nguyễn Đức Hải


3
en=0;
}

void show(unsigned char *s)


{
while(*s)
{
dat(*s++);
}
}

Nguyễn Đức Hải


4
BÀI 2: PIR sensor

Nguyễn Đức Hải


5
/*
* File: newmain.c
* Author: BinhNGO
*
* Created on August 15, 2020, 5:14 PM
*/

#include<htc.h>

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

#define PIR RD0 //PIR Output is connected at PORTD.0

#define rs RC0
#define rw RC1
#define en RC2
#define delay for(i=0;i<1000;i++)

int i;

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);

void main()

Nguyễn Đức Hải


6
{
TRISB=TRISC0=TRISC1=TRISC2=0;
TRISD=0xff; //Port D act as Input
lcd_init();
cmd(0x80);
//show(" EmbeTronicX ");
show(" BinhNGO,UTC ");
while(1) {
if(PIR == 0) {
cmd(0xc0);
show("Intruder Detcted");
// sáng đèn, quay động cơ servo mở cửa
delay;delay;
} else {
cmd(0xc0);
show(" ");
}
}
}

void lcd_init()
{
cmd(0x38);
cmd(0x0c);
cmd(0x06);
cmd(0x80);
}

Nguyễn Đức Hải


7
void cmd(unsigned char a)
{
PORTB=a;
rs=0;
rw=0;
en=1;
delay;
en=0;
}

void dat(unsigned char b)


{
PORTB=b;
rs=1;
rw=0;
en=1;
delay;
en=0;
}

void show(unsigned char *s)


{
while(*s)
{
dat(*s++);
}
}
BÀI 3: Cảm biến IR

Nguyễn Đức Hải


8
/*
* File: newmain.c
* Author: BinhNGO
*
* Created on August 15, 2020, 5:25 PM
*/

#include<htc.h>

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

#define IR RD0 //IR Output is connected at PORTD.0

#define rs RC0
#define rw RC1
#define en RC2

Nguyễn Đức Hải


9
#define delay for(i=0;i<1000;i++)

int i;

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);

void main()
{
TRISB=TRISC0=TRISC1=TRISC2=0;
TRISD=0xff; //Port D act as Input
lcd_init();
cmd(0x80);
show(" EmbeTronicX ");
while(1) {
if(IR == 0) {
cmd(0xc0);
show("Obstacle Detcted");
delay;delay;
} else {
cmd(0xc0);
show(" ");
}
}
}

Nguyễn Đức Hải


10
void lcd_init()
{
cmd(0x38);
cmd(0x0c);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
PORTB=a;
rs=0;
rw=0;
en=1;
delay;
en=0;
}

void dat(unsigned char b)


{
PORTB=b;
rs=1;
rw=0;
en=1;
delay;
en=0;
}

Nguyễn Đức Hải


11
void show(unsigned char *s)
{
while(*s)
{
dat(*s++);
}
}

Nguyễn Đức Hải


12
BÀI 4: Cảm biến âm thanh

/*
* File: newmain.c
* Author: BinhNGO
*
* Created on October 31, 2020, 8:58 AM
*/

#include<htc.h>

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

#define SOUND RD0 //Sound Sensor Output is connected at PORTD.0

#define rs RC0
#define rw RC1
#define en RC2

Nguyễn Đức Hải


13
#define delay for(i=0;i<1000;i++)

int i;

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);

void main()
{
TRISB=TRISC0=TRISC1=TRISC2=0;
TRISD=0xff; //Port D act as Input
lcd_init();
cmd(0x80);
show(" BinhNGO UTC ");
while(1) {
if(SOUND == 0) {
cmd(0xc0);
show(" Sound Detected");
delay;delay;
} else {
cmd(0xc0);
show(" ");
}
}
}

Nguyễn Đức Hải


14
void lcd_init()
{
cmd(0x38);
cmd(0x0c);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
PORTB=a;
rs=0;
rw=0;
en=1;
delay;
en=0;
}

void dat(unsigned char b)


{
PORTB=b;
rs=1;
rw=0;
en=1;
delay;
en=0;
}

Nguyễn Đức Hải


15
void show(unsigned char *s)
{
while(*s)
{
dat(*s++);
}
}
BÀI 5: Cảm biến mưa với PIC16F877A

/*
* File: newmain.c
* Author: BinhNGO
*
* Created on October 31, 2020, 9:46 AM
*/

#include<htc.h>

Nguyễn Đức Hải


16
__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

#define RAIN RD0 //Rain sensor Output is connected at PORTD.0

#define rs RC0
#define rw RC1
#define en RC2
#define delay for(i=0;i<1000;i++)

int i;

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);

void main()
{
TRISB=TRISC0=TRISC1=TRISC2=0;
TRISD=0xff; //Port D act as Input
lcd_init();
cmd(0x80);
show(" BinhNGO UTC ");
while(1) {
if(RAIN == 0) {
cmd(0xc0);

Nguyễn Đức Hải


17
show(" Rain Detected");
delay;delay;
} else {
cmd(0xc0);
show(" ");
}
}
}

void lcd_init()
{
cmd(0x38);
cmd(0x0c);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
PORTB=a;
rs=0;
rw=0;
en=1;
delay;
en=0;
}

void dat(unsigned char b)

Nguyễn Đức Hải


18
{
PORTB=b;
rs=1;
rw=0;
en=1;
delay;
en=0;
}

void show(unsigned char *s)


{
while(*s)
{
dat(*s++);
}
}

Nguyễn Đức Hải


19
BÀI 6: Mô-đun báo cháy Flame Sensor

/*
* File: newmain.c
* Author: BinhNGO
*
* Created on October 31, 2020, 9:36 AM
*/

#include<htc.h>

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

#define FLAME RD0 //Flame sensor Output is connected at PORTD.0

#define rs RC0
#define rw RC1
#define en RC2
#define delay for(i=0;i<1000;i++)

Nguyễn Đức Hải


20
int i;

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);

void main()
{
TRISB=TRISC0=TRISC1=TRISC2=0;
TRISD=0xff; //Port D act as Input
lcd_init();
cmd(0x80);
show(" BinhNGO UTC ");
while(1) {
if(FLAME) {
cmd(0xc0);
show(" Flame Detected");
delay;delay;
} else {
cmd(0xc0);
show(" ");
}
}
}

void lcd_init()

Nguyễn Đức Hải


21
{
cmd(0x38);
cmd(0x0c);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
PORTB=a;
rs=0;
rw=0;
en=1;
delay;
en=0;
}

void dat(unsigned char b)


{
PORTB=b;
rs=1;
rw=0;
en=1;
delay;
en=0;
}

void show(unsigned char *s)

Nguyễn Đức Hải


22
{
while(*s)
{
dat(*s++);
}
}
BÀI 7: Cảm biến khí gas LPG (LPG Gas Sensor)

/*
* File: newmain.c
* Author: BinhNGO
*
* Created on October 31, 2020, 9:55 AM
*/

#include<htc.h>

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

#define GAS RD0 //GAS sensor Output is connected at PORTD.0

Nguyễn Đức Hải


23
#define rs RC0
#define rw RC1
#define en RC2
#define delay for(i=0;i<1000;i++)

int i;

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);

void main()
{
TRISB=TRISC0=TRISC1=TRISC2=0;
TRISD=0xff; //Port D act as Input
lcd_init();
cmd(0x80);
show(" BinhNGO UTC ");
while(1) {
if(GAS) {
cmd(0xc0);
show(" Gas Detected");
delay;delay;
} else {
cmd(0xc0);
show(" ");

Nguyễn Đức Hải


24
}
}
}

void lcd_init()
{
cmd(0x38);
cmd(0x0c);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
PORTB=a;
rs=0;
rw=0;
en=1;
delay;
en=0;
}

void dat(unsigned char b)


{
PORTB=b;
rs=1;
rw=0;
en=1;

Nguyễn Đức Hải


25
delay;
en=0;
}

void show(unsigned char *s)


{
while(*s)
{
dat(*s++);
}
}

BÀI TẠP 8: Điều khiển động cơ điện 1 chiều

Nguyễn Đức Hải


26
/*
* File: newmain.c
* Author: BinhNGO
*
* Created on August 14, 2020, 9:04 AM
*/

#include<pic.h>

#define in1 RB0


#define in2 RB1
#define sw RB2
#define sw2 RB3
#define sw3 RB4

void main()
{
TRISB0=0;
TRISB1=0;
TRISB2=TRISB3=TRISB4=1;
while(1) {
if(sw==1) {
in1=1;
in2=0;
// LCD quay thuaan
} else {
in1=in2=0;
}

Nguyễn Đức Hải


27
}
}
BÀI 9: Cảm biến LDR

/*
* File: newmain.c
* Author: BinhNGO
*
* Created on October 31, 2020, 8:35 AM
*/

// LDR Sensor

#include<pic.h>
#define delay for(i=0;i<=1000;i++)
#define rs RC0
#define rw RC1
#define e RC2

Nguyễn Đức Hải


28
#define LED RD0

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

unsigned int adc();

void lcd_int();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);

int i;

void main()
{
unsigned int val;
TRISB=TRISC=0; //Port B and Port C is Output (LCD)
TRISD = 0; //Port D is output LED
TRISA0=1; //RA0 is input (ADC)
lcd_int();
while(1) {

cmd(0x80);
val = adc();
show("LIGHT:");
if(val>150) {
show("LOW-LED ON");

Nguyễn Đức Hải


29
LED = 1;
} else {
show("HI-LED OFF");
LED = 0;
}
}
}

void lcd_int()
{
cmd(0x38);
cmd(0x0c);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
PORTB=a;
rs=0;
rw=0;
e=1;
delay;
e=0;
}

void dat(unsigned char b)


{

Nguyễn Đức Hải


30
PORTB=b;
rs=1;
rw=0;
e=1;
delay;
e=0;
}

void show(unsigned char *s)


{
while(*s) {
dat(*s++);
}
}

unsigned int adc()


{
unsigned int adcval;

ADCON1=0xc0; //right justified


ADCON0=0x85; //adc on, fosc/64
while(GO_nDONE); //wait until conversion is finished
adcval=((ADRESH<<8)|(ADRESL)); //store the result
adcval=(adcval/3)-1;

return adcval;
}
BÀI 10: UART Terminal

Nguyễn Đức Hải


31
/*
* File: Serial_Interrupt.c
* Author: BinhNGO
*
* Created on August 13, 2020, 2:45 PM
*/

#include<pic.h>
#include"serial.h"
#include"lcd.h"

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

#define delay for(z=0;z<=50000;z++)

Nguyễn Đức Hải


32
unsigned int z;

void interrupt ser();

void main()
{
TRISD=0;
INTCON|=0b11000000;
PIE1=0b00100000;
lcd_init();
serial_init();
while(1) {
cmd(0x01);
}
}

void interrupt ser()


{
unsigned char a = RCREG;
tx(a);
cmd(0x80);
show("Serial interrupt");
cmd(0xc0);
show(" Key : ");
cmd(0xc8);
dat(a);
delay;delay;
TXIF=RCIF=0;

Nguyễn Đức Hải


33
}
// lcd8.h
#define lcd_dat PORTD
#define rs RC0
#define rw RC1
#define en RC2
#define delay for(i=0;i<1000;i++)

int i;

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);

void lcd_init()
{
TRISC0=TRISC1=TRISC2=TRISD=0;
cmd(0x38);
cmd(0x0e);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
lcd_dat=a;
rs=0;

Nguyễn Đức Hải


34
rw=0;
en=1;
delay;
en=0;
}

void dat(unsigned char b)


{
lcd_dat=b;
rs=1;
rw=0;
en=1;
delay;
en=0;
}

void show(unsigned char *s)


{
while(*s)
{
dat(*s++);
}
}
// serial.h
void serial_init();
void tx(unsigned char dat);
unsigned char rx();
void tx_string(unsigned char *s);

Nguyễn Đức Hải


35
void serial_init()
{
TRISC6=TRISC7=1;
TXSTA=0b00100010;
RCSTA=0b10010000;
SPBRG=17;
TXIF=RCIF=0;
}

void tx(unsigned char dat)


{
TXREG=dat;
while(!TXIF);
}

unsigned char rx()


{
while(!RCIF);
return RCREG;
}

void tx_string(unsigned char *s)


{
while(*s)
{
tx(*s++);
}

Nguyễn Đức Hải


36
}

Nguyễn Đức Hải


37
1. GIAO TIẾP UART:

2. /*
3. * File: newmain.c
4. * Author: BinhNGO
5. *
6. * Created on September 14, 2020, 11:28 AM
7. */
8.
9. #include<htc.h>
10.
11. __CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);
12.
13. void ser_int();
14. void tx(unsigned char);
15. unsigned char rx();
16. void txstr(unsigned char *);
17.
18. void main()
19. {
20. TRISC6=0; //Output (TX)
21. TRISC7=1; //Input (RX)
22. ser_int();
23. // txstr("(EmbeTronicX): Enter the letters in keyboard\n\r\r");
24. txstr("(Binh NGO test USART): Nhap ky tu tu ban phim may tinh:\n\r\r");
25. while(1) {
Nguyễn Đức Hải
38
26. tx(rx());
27. }
28. }
29.
30. void ser_int()
31. {
32. TXSTA=0x20; //BRGH=0, TXEN = 1, Asynchronous Mode, 8-bit mode
33. RCSTA=0b10010000; //Serial Port enabled,8-bit reception
34. SPBRG=17; //9600 baudrate for 11.0592Mhz
35. TXIF=RCIF=0;
36. }
37.
38. void tx(unsigned char a)
39. {
40. TXREG=a;
41. while(!TXIF);
42. TXIF = 0;
43. }
44.
45. unsigned char rx()
46. {
47. while(!RCIF);
48. RCIF=0;
49. return RCREG;
50. }
51.
52. void txstr(unsigned char *s)
53. {
54. while(*s) {
55. tx(*s++);
56. }
57. }

2. GIAO TIẾP LCD:

Nguyễn Đức Hải


39
#include <pic.h>

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

#define rs RD2
#define en RD3

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);
void lcd_delay();

void main()
{
unsigned int i;
TRISB=TRISD2=TRISD3=0;
lcd_init();
cmd(0x90);
//show("www.EmbeTronicX.com");
show("Binh NGO, WELCOME :)");
//show("CHAO MUNG KTDT&THCN-GTVT");
while(1)
{
for(i=0;i<15000;i++);
cmd(0x18);
for(i=0;i<15000;i++);

}
}

void lcd_init()
{
cmd(0x02);
cmd(0x28);
Nguyễn Đức Hải
40
cmd(0x0e);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
rs=0;
PORTB&=0x0F;
PORTB|=(a&0xf0);
en=1;
lcd_delay();
en=0;
lcd_delay();
PORTB&=0x0f;
PORTB|=(a<<4&0xf0);
en=1;
lcd_delay();
en=0;
lcd_delay();
}

void dat(unsigned char b)


{
rs=1;
PORTB&=0x0F;
PORTB|=(b&0xf0);
en=1;
lcd_delay();
en=0;
lcd_delay();
PORTB&=0x0f;
PORTB|=(b<<4&0xf0);
en=1;
lcd_delay();
en=0;
lcd_delay();
}

void show(unsigned char *s)


{
while(*s) {
dat(*s++);
Nguyễn Đức Hải
41
}
}

void lcd_delay()
{
unsigned int lcd_delay;
for(lcd_delay=0;lcd_delay<=1000;lcd_delay++);
}

3. TIMER 0 + TIMER1

// chuong trinh LCD:


#define lcd_dat PORTD
#define rs RC0
#define rw RC1
#define en RC2
#define delay for(i=0;i<1000;i++)

int i;

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);
Nguyễn Đức Hải
42
void lcd_init()
{
TRISC0=TRISC1=TRISC2=TRISD=0;
cmd(0x38);
cmd(0x0e);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
lcd_dat=a;
rs=0;
rw=0;
en=1;
delay;
en=0;
}

void dat(unsigned char b)


{
lcd_dat=b;
rs=1;
rw=0;
en=1;
delay;
en=0;
}

void show(unsigned char *s)


{
while(*s)
{
dat(*s++);
}
}

//chuong trinh neww main


/*
* File: newmain.c
* Author: BinhNGO
Nguyễn Đức Hải
43
*
* Created on August 13, 2020, 3:05 PM
*/

#include<pic.h>
#include"lcd.h"

#define delay for(z=0;z<=50000;z++)

unsigned int z;

int a=0,b=0,c=0;

void interrupt tmr0()


{
if(TMR0IF) {
a++;
if(a==42) //1sec
{
cmd(0x80);
show("Timer 0 interupt");
a=0;
delay;
}
TMR0IF=0;
} else if(TMR1IF) {
b++;
if(b==84) //2secs
{
cmd(0xc0);
show("Timer 1 interupt");
b=0;
delay;
}
TMR1IF=0;
} else if(TMR2IF) {
c++;
if(c==2025) //3secs
{
cmd(0x80);
show("Timer 2 interupt");
c=0;
delay;
Nguyễn Đức Hải
44
}
TMR2IF=0;
}

void intr_init()
{
INTCON=0xe0;
PIE1=0x03;
}

void timer_init()
{
OPTION_REG=0b00000111; //internal clk,rising edge,prescaler
with tim0,256
T1CON=0b00000001; //prescale=1,oscilator is off,internal
clk,timer on
T2CON=0b01111100; //postscale=16,prescale=1,timer on
}

void main()
{
lcd_init();
timer_init();
intr_init();
while(1) {
cmd(0x01);
}
}

// chuong trinh cua timer0 và timer 1

void timer_int();
void t0delay(unsigned int);
void t1delay(unsigned int);
void t2delay(unsigned int);

void timer_int()
Nguyễn Đức Hải
45
{
OPTION_REG=0b00000111; //internal clk,rising edge,prescaler
with tim0,256
T1CON=0b00000000; //prescale=1,oscilator is off,internal
clk,timer off
T2CON=0b01111000; //postscale=16,prescale=1,timer off
}

void t0delay(unsigned int a)


{
unsigned int i;
for(i=0;i<a;i++)
{
while(!TMR0IF);
TMR0IF=0;
}
}

void t1delay(unsigned int b)


{
unsigned int i;
T1CON|=(1<<0); //timer1 on
for(i=0;i<b;i++)
{
TMR1H=TMR1L=0;
while(!TMR1IF);
TMR1IF=0;
}
}

void t2delay(unsigned int c)


{
unsigned int i;
T2CON|=(1<<2); //timer2 on
for(i=0;i<c;i++)
{
while(!TMR2IF);
TMR2IF=0;
}
}
Nguyễn Đức Hải
46
5. LED 7 THANH ĐẾM TỪ 0 – 99

#include<pic.h>
#define led1 RC0
#define led2 RC1
#define sang 0
#define tat 1
__CONFIG(1);

void delay(int time)


{
while(time--);
}

unsigned char so[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};


unsigned char so1[]={0x90,0x80,0xf8,0x82,0x92,0x99,0xb0,0xa4,0xf9,0xc0};

Nguyễn Đức Hải


47
//========
int dem;
unsigned char chuc;
unsigned char donvi;

char i;

void main()
{

TRISB=0;

TRISC0=TRISC1=0;
led1=led2=tat;
while(1){
for(dem=0 ;dem<=99;dem++){
chuc =dem/10;
donvi=dem%10;

for(i=0;i<10;i++)
{
led1=sang;
PORTB=so[chuc];
delay(1000);
led1=tat;

Nguyễn Đức Hải


48
led2=sang;
PORTB=so[donvi];
delay(1000);
led2=tat;
}
}dem=100;
while(dem>0){
for(dem=0 ;dem<=99;dem++){
chuc =dem/10;
donvi=dem%10;

for(i=0;i<10;i++)
{
led1=sang;
PORTB=so1[chuc];
delay(1000);
led1=tat;

led2=sang;
PORTB=so1[donvi];
delay(1000);
led2=tat;
}
}
}
}
}

Nguyễn Đức Hải


49
6. PHÍM BẤM

/*
* File: Keypad.c
* Author: BinhNGO
*
* Created on August 13, 2020, 1:30 PM
*/

#include <pic.h>

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

Nguyễn Đức Hải


50
#define rs RD2 // LCD
#define en RD3

#define R1 RB0 // Key matrix


#define R2 RB1
#define R3 RB2
#define R4 RB3
#define C1 RB4
#define C2 RB5
#define C3 RB6
#define C4 RB7

void lcd_init(); // khoi tao


void cmd(unsigned char a); // dk
void dat(unsigned char b); // data char ASCII
void show(unsigned char *s); // hthi strinh
void lcd_delay();

unsigned char key();


void keyinit();

unsigned char keypad[4][4]={{'7','8','9','/'},{'4','5','6','*'},{'1','2','3','-'},{'C','0','=','+'}};


unsigned char rowloc,colloc;

void main()
{
unsigned int i;

Nguyễn Đức Hải


51
TRISD=0; // out
lcd_init();
keyinit();
unsigned char b;
cmd(0x80);
show(" Enter the Key ");
while(1)
{
cmd(0xc7);
b=key();
dat(b);

}
}

void lcd_init()
{
cmd(0x02);
cmd(0x28);
cmd(0x0e);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
rs=0;
PORTD&=0x0F;

Nguyễn Đức Hải


52
PORTD|=(a&0xf0);
en=1;
lcd_delay();
en=0;
lcd_delay();
PORTD&=0x0f;
PORTD|=(a<<4&0xf0);
en=1;
lcd_delay();
en=0;
lcd_delay();
}

void dat(unsigned char b)


{
rs=1;
PORTD&=0x0F;
PORTD|=(b&0xf0);
en=1;
lcd_delay();
en=0;
lcd_delay();
PORTD&=0x0f;
PORTD|=(b<<4&0xf0);
en=1;
lcd_delay();
en=0;
lcd_delay();

Nguyễn Đức Hải


53
}

void show(unsigned char *s)


{
while(*s) {
dat(*s++);
}
}

void lcd_delay()
{
unsigned int lcd_delay;
for(lcd_delay=0;lcd_delay<=1000;lcd_delay++);
}

void keyinit()
{
TRISB=0XF0;
OPTION_REG&=0X7F; //ENABLE PULL UP
}

unsigned char key()


{
PORTB=0X00;
while(C1&&C2&&C3&&C4);
while(!C1||!C2||!C3||!C4) {
R1=0;
R2=R3=R4=1;

Nguyễn Đức Hải


54
if(!C1||!C2||!C3||!C4) {
rowloc=0;
break;
}
R2=0;R1=1;
if(!C1||!C2||!C3||!C4) {
rowloc=1;
break;
}
R3=0;R2=1;
if(!C1||!C2||!C3||!C4) {
rowloc=2;
break;
}
R4=0; R3=1;
if(!C1||!C2||!C3||!C4){
rowloc=3;
break;
}
}
if(C1==0&&C2!=0&&C3!=0&&C4!=0)
colloc=0;
else if(C1!=0&&C2==0&&C3!=0&&C4!=0)
colloc=1;
else if(C1!=0&&C2!=0&&C3==0&&C4!=0)
colloc=2;
else if(C1!=0&&C2!=0&&C3!=0&&C4==0)
colloc=3;

Nguyễn Đức Hải


55
while(C1==0||C2==0||C3==0||C4==0);
return (keypad[rowloc][colloc]);
}

7. ĐỘNG CƠ MOTOR:

/*
* File: newmain.c
* Author: BinhNGO
*
* Created on August 14, 2020, 9:04 AM
*/

#include<pic.h>

#define in1 RB0


#define in2 RB1
Nguyễn Đức Hải
56
#define sw RB2

void main()
{
TRISB0=0;
TRISB1=0;
TRISB2=1;
while(1) {
if(sw==1) {
in1=1;
in2=0;
} else {
in1=in2=0;
}
}
}

8. GIAO TIẾP VỚI ADC

Nguyễn Đức Hải


57
/*
* File: newmain.c
* Author: BinhNGO
*
* Created on August 13, 2020, 2:22 PM
*/

#include<pic.h>
#define delay for(i=0;i<=1000;i++)
#define rs RC0
#define rw RC1
#define e RC2

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

void adc();

void lcd_int();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);

int i;

void main()
{
TRISB=TRISC=0; //Port B and Port C is Output (LCD)

Nguyễn Đức Hải


58
TRISA0=1; //RA0 is input (ADC)
lcd_int();
show("ADC Value :");
while(1) {
cmd(0x8C);
adc();
}
}

void lcd_int()
{
cmd(0x38);
cmd(0x0c);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
PORTB=a;
rs=0;
rw=0;
e=1;
delay;
e=0;
}

void dat(unsigned char b)

Nguyễn Đức Hải


59
{
PORTB=b;
rs=1;
rw=0;
e=1;
delay;
e=0;
}

void show(unsigned char *s)


{
while(*s) {
dat(*s++);
}
}

void adc()
{
unsigned int adcval;

ADCON1=0xc0; //right justified


ADCON0=0x85; //adc on, fosc/64
while(GO_nDONE); //wait until conversion is finished
adcval=((ADRESH<<8)|(ADRESL)); //store the result
adcval=(adcval/3)-1;
dat((adcval/1000)+48);
dat(((adcval/100)%10)+48);
dat(((adcval/10)%10)+48);

Nguyễn Đức Hải


60
dat((adcval%10)+48);
}

10. GIAO TIẾP VỚI I2C

Nguyễn Đức Hải


61
// chương trình lcd
#define rs RC0
#define rw RC1
#define en RC2
#define delay for(i=0;i<1000;i++)

int i;

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);

void lcd_init()
{
TRISB=TRISC0=TRISC1=TRISC2=0;
cmd(0x38);
cmd(0x0c);
cmd(0x06);
cmd(0x80);
}

void cmd(unsigned char a)


{
PORTB=a;
rs=0;
rw=0;
en=1;

Nguyễn Đức Hải


62
delay;
en=0;
}

void dat(unsigned char b)


{
PORTB=b;
rs=1;
rw=0;
en=1;
delay;
en=0;
}

void show(unsigned char *s)


{
while(*s) {
dat(*s++);
}
}
// chuong trinh cua i2c
#define write_cmd 0xA0
#define read_cmd 0xA1

void i2c_init();
void i2c_start();
void i2c_stop();
void i2c_restart();

Nguyễn Đức Hải


63
void i2c_ack();
void i2c_nak();
void waitmssp();
void i2c_send(unsigned char dat);
void i2c_send_byte(unsigned char addr,unsigned char *count);
unsigned char i2c_read();
unsigned char i2c_read_byte(unsigned char addr);

void i2c_init()
{
TRISC3=TRISC4=1;
SSPCON=0x28; //SSP Module as Master
SSPADD=((11059200/4)/100)-1; //Setting Clock Speed, My PCLK = 11.0592MHz
}

void i2c_start()
{
SEN=1;
waitmssp();
}

void i2c_stop()
{
PEN=1;
waitmssp();
}

void i2c_restart()

Nguyễn Đức Hải


64
{
RSEN=1;
waitmssp();
}

void i2c_ack()
{
ACKDT=0;
ACKEN=1;
waitmssp();
}

void i2c_nak()
{
ACKDT=1;
ACKEN=1;
waitmssp();
}

void waitmssp()
{
while(!SSPIF);
SSPIF=0;
}

void i2c_send(unsigned char dat)


{
L1: SSPBUF=dat;

Nguyễn Đức Hải


65
waitmssp();
while(ACKSTAT){i2c_restart;goto L1;}
}

void i2c_send_byte(unsigned char addr,unsigned char *count)


{
i2c_start();
i2c_send(write_cmd);
i2c_send(addr>>8);
i2c_send(addr);
while(*count) {
i2c_send(*count++);
}
i2c_stop();
}

unsigned char i2c_read()


{
RCEN=1;
waitmssp();
return SSPBUF;
}

unsigned char i2c_read_byte(unsigned char addr)


{
unsigned char rec;
L: i2c_restart();
SSPBUF=write_cmd;

Nguyễn Đức Hải


66
waitmssp();
while(ACKSTAT){goto L;}
i2c_send(addr>>8);
i2c_send(addr);
i2c_restart();
i2c_send(read_cmd);
rec=i2c_read();
i2c_nak();
i2c_stop();
return rec;
}
// chương trình chính
/*
* File: newmain.c
* Author: BinhNGO
*
* Created on August 13, 2020, 2:25 PM
*/
#include<pic.h>
#include"lcd.h"
#include"i2c.h"

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON &
LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

void delay1();

void main()

Nguyễn Đức Hải


67
{
lcd_init();
i2c_init();
//show(" I2C TuTorial ");
show("I2C PIC - EEPROM");
cmd(0xc2);
show("Writing...");
//i2c_send_byte(0x0000,"EmbeTronicX");
i2c_send_byte(0x0000,"BinhNGO,UTC");
delay1();
cmd(0xc2);
show("Reading...");
delay1();
cmd(0xc2);
dat(i2c_read_byte(0x0000));
dat(i2c_read_byte(0x0001));
dat(i2c_read_byte(0x0002));
dat(i2c_read_byte(0x0003));
dat(i2c_read_byte(0x0004));
dat(i2c_read_byte(0x0005));
dat(i2c_read_byte(0x0006));
dat(i2c_read_byte(0x0007));
dat(i2c_read_byte(0x0008));
dat(i2c_read_byte(0x0009));
dat(i2c_read_byte(0x000a));

while(1);
}

Nguyễn Đức Hải


68
void delay1()
{
unsigned int j,k;
for(j=0;j<60000;j++) {
for(k=0;k<2;k++);
}
}

#include <pic.h>

#include "lcd4.h"

__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON & LVP_OFF & CPD_OFF &
WRT_OFF & DEBUG_OFF);

int a=0;

void delay(unsigned int a)

Nguyễn Đức Hải


69
{ unsigned int i;

for (i=0; I < a; i++){

while(!TMR0IF);

TMR0IF=0;

unsigned int i;

void len()

{ for (i = 0; i < 100; i++)

{ cmd(0xc8);

dat((i / 10) + 48);

dat((i % 10) + 48);

delay(21);

void xuong()

{ for (i = 99; i > 0; i--) {

cmd(0xc8);

dat((i / 10) + 48);

dat((i % 10) + 48);

delay(42);

void main() {

unsigned int i;

TRISB = TRISC0 = TRISC1= 0;

OPTION_REG=0X07;

INTCON = 0X0E;

lcd_init();
Nguyễn Đức Hải
70
// cmd(0x90);

how("Dem 0-99");

while (1) {

len();

xuong();

#include

#define _XTAL_FREQ 8000000 //

CONFIG __CONFIG(FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON & LVP_OFF &
CPD_OFF & WRT_OFF & DEBUG_OFF);

void displayed(unsigned int digit);

unsigned char const SEGMENT_MAP[10] = {0XBF,0X86,0XDB,0XCF,0XE6,0XED,0XFD,0X 87,0XFF,0XEF};

void main(void) {

ADCON1 = 0x07;

TRISB = 0x00;
Nguyễn Đức Hải
71
//Set PortB to all outputs

TRISA0 = TRISA1 = 1;

TRISC0 = TRISC1 = 0;

char digit=0;

while(1)

displayed(digit);

if (!RA0) //Check if switch SW1 is closed

{ __delay_ms(100);

if(!RA0) //Check if switch SW1 is still closed

{ digit++;

if (digit==100)

digit=0; __

delay_ms(10); //wait for 100ms } }

else{ displayed(digit); }

if (!RA1) //Check if switch SW1 is closed

{ __delay_ms(100); //wait for 100ms

if (!RA1) //Check if switch SW1 is still closed

{ digit--;

if (digit==0)

digit=99;

__delay_ms(10); //Delay 1 second } }

else { displayed(digit); }

}}

void displayed(unsigned int digit)

{ unsigned int one,ten;

ten = (digit)/10;

one = (digit)%10;

RC0 = 0;
Nguyễn Đức Hải
72
PORTB = (SEGMENT_MAP[ten]);

_delay_ms(10);

RC0 = 1;

RC1 = 0;

PORTB = (SEGMENT_MAP[one]);

__delay_ms(10);

RC1 = 1;

#include

#define lcd_dat PORTB

#define rs RC0

#define rw RC1

#define en RC2

#define delay for(i=0;i<1000;i++)


Nguyễn Đức Hải
73
int i;

void lcd_init();

void cmd(unsigned char a);

void dat(unsigned char b);

void show(unsigned char *s);

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON & LVP_OFF & CPD_OFF &
WRT_OFF & DEBUG_OFF);

void ser_int();

void tx(unsigned char);

unsigned char rx();

void txstr(unsigned char *);

void main()

{ TRISD=1;

int i;

unsigned char id[12];

TRISC6=TRISC7=1;

ser_int();

lcd_init();

cmd(0x80);

show("<>");

cmd(0xc0);

} while(1); }

void ser_int()

{ TXSTA=0x20;

RCSTA=0b10010000;

SPBRG=17; TXIF=RCIF=0; }

void tx(unsigned char a)

{ TXREG=a;

while(!TXIF);
Nguyễn Đức Hải
74
TXIF = 0; }

unsigned char rx()

{ while(!RCIF);

RCIF=0;

return RCREG; }

void txstr(unsigned char *s)

{ while(*s)

{ tx(*s++); } }

void lcd_init()

{ TRISC0=TRISC1=TRISC2=TRISB= 0;

cmd(0x38);

cmd(0x0c);

cmd(0x06);

cmd(0x80); }

void cmd(unsigned char a)

{ lcd_dat=a;

rs=0;

rw=0;

en=1

delay;

en=0; }

void dat(unsigned char b)

{ lcd_dat=b;

rs=1;

rw=0;

en=1;

delay;

en=0; }

void show(unsigned char *s)


Nguyễn Đức Hải
75
{ while(*s)

{ dat(*s++); } }

Code

#define _XTAL_FREQ 8000000

#include const unsigned char Code7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
unsigned int count=0;

void interrupt ISR(void);

void main (void)

{ TRISD = 0x00;

PORTD = 0X00;

TRISB0 = 1;

PORTB = 0X00;

GIE = 1;

INTE = 1;

INTEDG = 1

while(1)

Nguyễn Đức Hải


76
{ PORTD = Code7Seg[count];

if(count==10) { count=0; } } }

void interrupt ISR(void)

{ if(INTF==1) {

{ count++; INTF=0; }

#include

#include "key.h"

#include"lcd4.h"

__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON & LVP_OFF & CPD_OFF &
WRT_OFF & DEBUG_OFF);

void main() {

unsigned int i;

TRISD = 0;
Nguyễn Đức Hải
77
TRISC0=TRISC1 = 0;

TRISC5 = 0;

lcd_init();

keyinit();

unsigned char b;

cmd(0x80);

show(" Enter the Key ");

while (1) { cmd(0xc7);

b = key();

dat(b); } }

Nguyễn Đức Hải


78
#define _XTAL_FREQ 8000000

#include <xc.h>

// CONFIG __CONFIG(FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON & LVP_OFF &
CPD_OFF & WRT_OFF & DEBUG_OFF);

unsigned int dem = 0,nghin,tram,chuc,donvi;

const unsigned char maled[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

void display(void);

void main(void)

{ OPTION_REGbits.T0CS = 1; // Dem xung ngoai

OPTION_REGbits.PSA = 1; // Su dung bo chia truoc WDT TRISB = 0;

PORTB = 0;

TRISDbits.TRISD0 = 0;

TRISDbits.TRISD1 = 0;

PORTD = 0;

while (1) {

display();

dem=TMR0;

if(dem>=100)

{ TMR0=0; dem=0; } }

} void display (void)

{ chuc = dem/10;

donvi = dem%10;

PORTB = maled[chuc];

RD0=0;

__delay_ms(10);

RD0=1;

PORTB = maled[donvi];

RD1=0;

__delay_ms(10);
Nguyễn Đức Hải
79
RD1=1; }

#include

#include"lcd4.h"

#include "timers.h"

#define delay for(z=0;z<=50000;z++)

__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON & LVP_OFF & CPD_OFF &
WRT_OFF & DEBUG_OFF); // unsigned int z;

unsigned int z;

int a=0,b=0,c=0;

void interrupt tmr0()

{ if(TMR0IF)

{ a++;

if(a==42) //1sec

{ cmd(0x80);

show("Timer 0 interupt");

RD0= 1;

// RD1= 0;

RD2= 0;
Nguyễn Đức Hải
80
a=0;

delay; }

TMR0IF=0; }

else if(TMR1IF)

{ b++;

if(b==84) //2secs {

cmd(0xc0);

show("Timer 1 interupt");

RD0 = 0;

RD1 = 1;

b=0;

delay;}

TMR1IF=0;

} else if(TMR2IF)

{ c++;

if(c==2025) //3secs

{ cmd(0x80);

show("Timer 2 interupt");

RD0 = 0;

RD1 = 0;

RD2 = 1;

c=0; delay; }

TMR2IF=0; }}

void intr_init()

{ INTCON=0xe0;

PIE1=0x03; }

void timer_init()

{ OPTION_REG=0b00000111; //internal clk,rising edge,prescaler with tim0,256

Nguyễn Đức Hải


81
T1CON=0b00000001; //prescale=1,oscilator is off,internal clk,timer on T2CON=0b01111100;
//postscale=16,prescale=1,timer on }

void main()

{ //TRISD0 = TRISD1 = TRISD2= TRISD0=TRISD1=TRISD2= TRISB4= TRISB5 = TRISB6 = TRISB7 = TRISC0 =


TRISC1 = 0;

lcd_init();

timer_init();

intr_init();

while(1)

{ delay;

cmd(0x01);

delay;} }

Nguyễn Đức Hải


82
#include <studio.h>

#include <studio.h>

#define _XTAL_FREQ 4000000

#include <xc.h>

// CONFIG __CONFIG(FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON & LVP_OFF &
CPD_OFF & WRT_OFF & DEBUG_OFF); //

void GPIO_init (void);

void SANGHET (void);

void TATHET (void);

void XENKE (void);

void SANGNUA (void);

void main (void) {

GPIO_init();

while(1) { SANGHET();

__delay_ms(500);

TATHET();

__delay_ms(500);

XENKE(); _

_delay_ms(500);

SANGNUA();

__delay_ms(500); } }

void GPIO_init(void)

{ TRISB = 0X00;

PORTB = 0X00; }

void SANGHET (void)

{ PORTB = 0XFF;

void TATHET (void)

{ PORTB = 0X00;
Nguyễn Đức Hải
83
}

void XENKE (void)

{ PORTB = 0XAA;

__delay_ms(500);

PORTB = 0X55; }

void SANGNUA (void) {

PORTB = 0X0F;

__delay_ms(500);

PORTB = 0XF0; }

#include <pic.h>

#include <htc.h>

#define FREQ_OSC 11059200u1

void delay_ms(int x) {

int i,j;

for(i = 0;i < x; i++) {

for(j = 0 ; j <123;j++)}}}}

Nguyễn Đức Hải


84
#define r4 RB7

#define r3 RB6

#define r2 RB5

#define r1 RB4

#define c4 RB3

#define c3 RB2

#define c2 RB1

#define c1 RB0

#define led PORTC

int returnKeyPad() //khi bam mot nut tra ve mot gia tri tuong ung {

if(r1==1&&r2==1&&r3==1&&r4==1)

return 0;

if(r1==0 && r2==1 && r3==1&&r4==1)

{ if(c1==0)

return 1;

if(c2==0)

return 2;

if(c3==0)

return 3;

if(c4==0)

return 13; }

if(r2==0&&r1==1&&r3==1&&r4==1)

{ if(c1==0)

return 4;

if(c2==0)

return 5;

if(c3==0)

return 6;

if(c4==0)
Nguyễn Đức Hải
85
return 14; }

if(r1==1&&r2==1&&r3==0&&r4==1)

{ if(c1==0)

return 7;

if(c2==0)

return 8;

if(c3==0)

return 9;

if(c4==0)

return 15; }

if(r1==1&&r2==1&&r3==1&&r4==0)

{ if(c1==0)

return 10;

if(c2==0) return 11;

if(c3==0)

return 12;

if(c4==0)

return 16; } }

void LED(int x) //voi moi gia tri tra ve thi co mot muc sang tuong ung

{ switch(x)

{ case 1:

led=0x60;

while(r1==0);

break;

case 2:

led= 0xda;

while(r1==0);

break;

case 3:
Nguyễn Đức Hải
86
led= 0xf2;

while(r1==0);

break;

case 4:

led= 0x66;

while(r2==0);

break;

case 5:

led= 0xb6;

while(r2==0);

break; case 6:

led= 0xbe;

while(r2==0);

break;

case 7:

led=0xe0;

while(r3==0);

break;

case 8:

led=0xfe;

while(r3==0);

break;

case 9:

led=0xE6;

while(r3==0);

break;

case 13:

led= 0xfc;

while(r1==0);
Nguyễn Đức Hải
87
break;

case 14:

led= 0x7a;

while(r2==0);

break;

case 15:

led= 0x9e;

while(r3==0);

break;

case 16:

led= 0x8E;

while(r4==0);

break;

case 12:

led=0x9C;

while(r4==0);

break;

case 11:

led= 0x3E;

while(r4==0);

break;

case 10:

led=0xee;

while(r4==0); break; } }

void keyinit()

{ TRISB = 0XF0;

OPTION_REG &= 0X7F; //ENABLE PULL UP }

void scan(int i)

{ if(i==0) { c1=0; c2=c3=c4=1;


Nguyễn Đức Hải
88
delay_ms(10); }

if(i==1) { c2=0; c1=c3=c4=1;

delay_ms(10); }

if(i==2) { c3=0; c1=c2=c4=1;

delay_ms(10); }

if(i==3) { c4=0; c1=c2=c3=1;

delay_ms(10); } }

void main() {

TRISB=1;

TRISC=0;

keyinit();

int i =0;

while(1) {

PORTC=0x02;

scan(i);

i++;

if(i>=4) i=0;

LED(returnKeyPad()); } }

Nguyễn Đức Hải


89
Nguyễn Đức Hải
90
#include<stdio.h>

#include<stdio.h>

#define _XTAL_FREQ 8000000 // if 4Mhz is XT

#include<xc.h>

// CONFIG __CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON & LVP_OFF &
CPD_OFF & WRT_OFF & DEBUG_OFF);

#define seg_data PORTC const unsigned char maled7[] = {0XBF,0X86,0XDB,0XCF,0XE6,0XED,0X


FD,0X87,0XFF,0XEF};

void ADCinit (void);

unsigned int ReadADC (void);

unsigned int ADCvalue = 0;

void msdelay(unsigned int itime);

void delay();

void display_digit(int);

int f; unsigned int voltage;

void main()

{ TRISA = 0xff; TRISC = 0X00; TRISD = 0X00;

ADCinit();

unsigned int ones,tens=0;

while(1) { ADCvalue = ReadADC();

voltage = 5000.0f / 1023 * ADCvalue;

f = voltage / 10;

ones=f%10;

tens=(f/10)%10;

display_digit(tens);

RD0=1;

delay();

RD0=0;

display_digit(ones);

Nguyễn Đức Hải


91
RD1=1;

delay();

RD1=0; } }

void msdelay(unsigned int itime)

{ unsigned int i,j;

for(i=0;I < itime ; i++)

for(j = 0; j<1275; j++) ;

void display_digit(int c)

switch(c) {

case 0:

seg_data=0xC0;

break;

case 1:

seg_data=0xF9;

break;

case 2:

seg_data=0xA4;

break;

case 3:

seg_data=0xB0;

break;

case 4:

seg_data=0x99;

break;

case 5:

seg_data=0x92;

break;
Nguyễn Đức Hải
92
case 6:

seg_data=0x82;

break;

case 7:

seg_data=0xF8;

break;

case 8:

seg_data=0x80;

break;

case 9:

seg_data=0x90;

break; } }

void delay() {

long int k; for(k=0;k<100; k++)

void ADCinit (void)// adc

{ // chon tan so clock cho bo adc

ADCON1bits.ADCS2 = 0,

ADCON0bits.ADCS1 = 0,

ADCON0bits.ADCS0 = 1;

// chon kenh adc la kenh an0

ADCON0bits.CHS2 = 0,

ADCON0bits.CHS1 = 0,

ADCON0bits.CHS0 = 0;

// chon cach luu data

ADCON1bits.ADFM = 1;

// cau hinh cong vao

ADCON1bits.PCFG3 = 1,

ADCON1bits.PCFG2 = 1,
Nguyễn Đức Hải
93
ADCON1bits.PCFG1 = 1,

ADCON1bits.PCFG0 = 0;

// cap nguon cho khoi adc

ADCON0bits.ADON = 1; }

unsigned int ReadADC (void)

// doc len 7 doan

{ unsigned int TempValue = 0;

ADCON0bits.GO_nDONE = 1;

while(ADCON0bits.GO_nDONE);

TempValue = ADRESH*256 + ADRESL;

return (TempValue); }

Nguyễn Đức Hải


94
Nguyễn Đức Hải
95
Nguyễn Đức Hải
96

You might also like