BÀI tập môn VI điều KHIỂN NÂNG CAO

33 884 0
BÀI tập môn VI điều KHIỂN NÂNG CAO

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BÀI TẬP MÔN VI ĐIỀU KHIỂN NÂNG CAO Thiết kế ứng dụng với ngắt Bài 01 Lập trình đếm sản phẩm chân ngắt INT0 hiển thị led theo phương pháp quét led #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF #define led1 PORTEbits.RE0 #define led2 PORTEbits.RE1 #define led3 PORTEbits.RE2 unsigned int SP; unsigned char maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void ngat_ngoai(void); #pragma code uu_tien_cao = 0x08 void ngat_cao(void) { ngat_ngoai(); //g?i đ?n CTCPVN } #pragma code #pragma interrupt ngat_ngoai void ngat_ngoai(void) { if (INTCONbits.INT0IF==1) { SP++; INTCONbits.INT0IF=0; } } void main() { TRISB=0XFF; TRISD=0X00; TRISE=0X00; ADCON1=0X0F; INTCONbits.INT0IE=1; INTCONbits.INT0IF=0; INTCON2bits.INTEDG0=1; RCONbits.IPEN=0; INTCONbits.GIE=1; INTCONbits.PEIE=1; SP=123; while(1) { led1=1;led2=0;led3=0; PORTD=maled[SP/100]; Delay10KTCYx(5); led1=0;led2=1;led3=0; PORTD=maled[(SP%100)/10]; Delay10KTCYx(5); led1=0;led2=0;led3=1; PORTD=maled[(SP%100)%10]; Delay10KTCYx(5); } } Bài 02 Lập trình đếm sản phẩm chân ngắt INT1 hiển thị led theo phương pháp quét led #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF #define led1 PORTCbits.RC0 #define led2 PORTCbits.RC1 #define led3 PORTCbits.RC2 #define led4 PORTCbits.RC3 unsigned int SP; unsigned char maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void ngat_ngoai(void); #pragma code uu_tien_cao = 0x08 void ngat_cao(void) { } #pragma code #pragma interrupt ngat_ngoai void ngat_ngoai(void) { if (INTCON3bits INT1IF==1) { SP++; INTCON3bits.INT1IF=0; } } void main() { TRISB=0XFF; TRISD=0X00; TRISC=0X00; ADCON1=0X0F; INTCON3bits.INT1IE=1; INTCON3bits.INT1IP=1; INTCON3bits.INT1IF=0; INTCON2bits.INTEDG1=1; RCONbits.IPEN=0; INTCONbits.GIE=1; INTCONbits.PEIE=1; SP=1234; while(1) { led1=1;led2=0;led3=0;led4=0; PORTD=maled[SP/1000]; Delay10KTCYx(1); led1=0;led2=1;led3=0;led4=0; PORTD=maled[((SP%1000)/100)]; Delay10KTCYx(1); led1=0;led2=0;led3=1;led4=0; PORTD=maled[(((SP%1000)%100)/10)]; Delay10KTCYx(1); led1=0;led2=0;led3=0;led4=1; PORTD=maled[(((SP%1000)%100)%10)]; Delay10KTCYx(1); } } Bài 03 Lập trình đếm sản phẩm chân ngắt INT1 hiển thị LCD (số sản phẩm hiển thị từ 00 đến 99) #include #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF #define LCD_DATA PORTD #define LCD_RS PORTEbits.RE0 #define LCD_RW PORTEbits.RE1 #define LCD_EN PORTEbits.RE2 void Lcd_configure(void); void Lcd_Write_Command(char command); void Lcd_Write_Data(char data); void Lcd_Write_String(char*str); void Lcd_configure(void) { Lcd_Write_Command(0x01); Lcd_Write_Command(0x03); Lcd_Write_Command(0x38); Lcd_Write_Command(0x38); Lcd_Write_Command(0x0c); } void Lcd_Write_Command(char command) { LCD_RS=0; LCD_RW=0; LCD_EN=1; LCD_DATA= command; LCD_EN=0; Delay1KTCYx(5); } void Lcd_Write_Data(char data) { LCD_RS=1; LCD_RW=0; LCD_EN=1; LCD_DATA= data; LCD_EN=0; Delay1KTCYx(5); } void Lcd_Write_String(char*str) { while(*str) { Lcd_Write_Data(*str); str++; } } unsigned int SP; void ngat_ngoai(void); #pragma code uu_tien_cao = 0x08 void ngat_cao(void) { ngat_ngoai(); } #pragma code #pragma interrupt ngat_ngoai void ngat_ngoai(void) { if (INTCON3bits.INT1IF==1) { SP++; INTCON3bits.INT1IF=0; } } void main() { TRISB=0XFF; TRISD=0X00; TRISE=0X00; ADCON1=0X0F; INTCON3bits.INT1IE=1; INTCON3bits.INT1IP=1; INTCON3bits.INT1IF=0; INTCON2bits.INTEDG1=1; RCONbits.IPEN=0; INTCONbits.GIE=1; INTCONbits.PEIE=1; Lcd_configure(); SP=12; while(1) { Lcd_Write_Command(0x80); Lcd_Write_Data((SP/10)+0x30); Lcd_Write_Data((SP%10)+0x30); } } Bài 04 Lập trình đếm sản phẩm chân ngắt INT1 hiển thị LCD (số sản phẩm hiển thị từ 0000 đến 9999) #include #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF #define LCD_DATA PORTD #define LCD_RS PORTCbits.RC0 #define LCD_RW PORTCbits.RC1 #define LCD_EN PORTCbits.RC2 unsigned int sp; void ngat_ngoai(void); #pragma code uu_tien_cao = 0x08 void ngat_cao(void) { ngat_ngoai(); } #pragma code #pragma interrupt ngat_ngoai void ngat_ngoai(void) { if (INTCON3bits.INT1IF==1) { sp++; } INTCON3bits.INT1IF=0; } void Lcd_configure(void); void Lcd_Write_Command(char command); void Lcd_Write_Data(char data); void Lcd_Write_String(char*str); void Lcd_configure(void) { Lcd_Write_Command(0x01); Lcd_Write_Command(0x03); Lcd_Write_Command(0x38); Lcd_Write_Command(0x06); Lcd_Write_Command(0x0c); } void Lcd_Write_Command(char command) { LCD_RS=0; LCD_RW=0; LCD_EN=1; LCD_DATA= command; LCD_EN=0; Delay1KTCYx(5); } void Lcd_Write_Data(char data) { LCD_RS=1; LCD_RW=0; LCD_EN=1; LCD_DATA= data; LCD_EN=0; Delay1KTCYx(5); } void Lcd_Write_String(char*str) { while(*str) { Lcd_Write_Data(*str); str++; } } void main() { TRISB=0XFF; TRISD=0X00; TRISC=0X00; ADCON1=0X0F; INTCON3bits.INT1IE=1; INTCON3bits.INT1IF=0; INTCON3bits.INT1IP=1; RCONbits.IPEN=0; INTCONbits.GIE=1; INTCONbits.PEIE=1; INTCON2bits.INTEDG1=1; sp=1234; Lcd_configure(); while(1) { Lcd_Write_Command(0x80); Lcd_Write_Data((sp/1000)+0x30); Lcd_Write_Data(((sp%1000)/100)+0x30); Lcd_Write_Data((((sp%1000)%100)/10)+0x30); Lcd_Write_Data((((sp%1000)%100)%10)+0x30); } } Bài 05 Lập trình đếm sản phẩm chân ngắt INT2 hiển thị LCD (số sản phẩm hiển thị từ 0000 đến 9999) #include #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF #define LCD_DATA PORTD #define LCD_RS PORTCbits.RC0 #define LCD_RW PORTCbits.RC1 #define LCD_EN PORTCbits.RC2 unsigned int sp; void ngat_ngoai(void); #pragma code uu_tien_cao = 0x08 void ngat_cao(void) { ngat_ngoai(); //g?i đ?n CTCPVN } #pragma code #pragma interrupt ngat_ngoai void ngat_ngoai(void) { if (INTCON3bits.INT2IF==1) { sp++; } INTCON3bits.INT2IF=0; } void Lcd_configure(void); void Lcd_Write_Command(char command); void Lcd_Write_Data(char data); void Lcd_Write_String(char*str); void Lcd_configure(void) { Lcd_Write_Command(0x01); Lcd_Write_Command(0x03); Lcd_Write_Command(0x38); Lcd_Write_Command(0x06); Lcd_Write_Command(0x0c); 10 Lcd_Write_Data ((sp%1000)/100+0x30); Lcd_Write_Data (((sp%1000%100)/10)+0x30); Lcd_Write_Data (((sp%1000)%100)%10+0x30); } } Bài 04 Lập trình đo tần số sử dụng Timer1 hiển thị LCD Dải tần số đo từ đến 9999Hz #include #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF #pragma config LVP=OFF #define DATA PORTD #define RS PORTCbits.RC5 #define RW PORTCbits.RC6 #define EN PORTCbits.RC7 // dung nut nhan tren chan RC0 unsigned int sp;unsigned int bt;unsigned int bc; void Lcd_configure (void); void Lcd_Write_Command (char command); void Lcd_Write_Data (char data); void Lcd_configure (void) { Lcd_Write_Command(0x03); Lcd_Write_Command(0x38); Lcd_Write_Command(0x06); Lcd_Write_Command(0x0c); // Lcd_Write_Command(0x1c); } void Lcd_Write_Command (char command ) 19 { RS=0; RW=0; EN=1; DATA = command; EN= 0; Delay1KTCYx(5); } void Lcd_Write_Data (char data) { RS=1; RW=0; EN=1; DATA=data; EN=0; Delay1KTCYx(5); } void main (void) { TRISA=0XFF; TRISC=0X00; TRISD=0X00; ADCON1=0X0F; T1CONbits.TMR1ON=1; T1CONbits.RD16=0; T1CONbits.TMR1CS=1; T1CONbits.T1CKPS1=0; T1CONbits.T1CKPS0=0; TMR1H=0;TMR1L=0; Lcd_configure(); while(1) { bt=TMR1L;//BIT CAO bc=TMR1H;//BIT THAP sp=bc*256+bt; 20 Lcd_Write_Command (0xc5 ); Lcd_Write_Data ((sp/1000)+0X30) ; Lcd_Write_Data ((sp%1000)/100+0x30); Lcd_Write_Data (((sp%1000%100)/10)+0x30); Lcd_Write_Data (((sp%1000)%100)%10+0x30); } } Thiết kế ứng dụng với ADC Bài Thiết Bài kê đo điện áp kênh AN0 hiển thị LCD #include #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF #pragma config LVP=OFF #define DATA PORTD #define RS PORTEbits.RE0 #define RW PORTEbits.RE1 #define EN PORTEbits.RE2 unsigned int ADC; void Lcd_configure (void); void Lcd_Write_Command (char command); void Lcd_Write_Data (char data); void Lcd_configure (void) { Lcd_Write_Command(0x03); Lcd_Write_Command(0x38); Lcd_Write_Command(0x06); Lcd_Write_Command(0x0c); } void Lcd_Write_Command (char command ) 21 { RS=0; RW=0; EN=1; DATA = command; EN= 0; Delay1KTCYx(5); } void Lcd_Write_Data (char data) { RS=1; RW=0; EN=1; DATA=data; EN=0; Delay1KTCYx(5); } void main () { float dienap; int dienap2; TRISA=0X01; TRISE=0b00000000; TRISD=0b00000000; ADCON1=0X0F; Lcd_configure(); ADC=1234; OpenADC( ADC_FOSC_16 & ADC_RIGHT_JUST & ADC_4_TAD, ADC_CH0 & ADC_INT_OFF& ADC_VREFPLUS_VDD& ADC_VREFMINUS_VSS, 14 ); 22 while(1) { while(BusyADC()); ConvertADC(); while(BusyADC()); ADC = ReadADC(); dienap =((float)ADC*5)/1023; dienap2=(int)(dienap*100); Lcd_Write_Command (0x80 ); Lcd_Write_Data ((dienap2/100)+0X30) ; Lcd_Write_Data ('.'); Lcd_Write_Data ((dienap2%100)/10+0x30); Lcd_Write_Data ((dienap2%100)%10+0x30); } } Bài 02 Thiết kế đo nhiệt độ sử dụng cảm biến LM35 kênh AN1 hiển thị LCD #include #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF #pragma config LVP=OFF #define DATA PORTD #define RS PORTCbits.RC5 #define RW PORTCbits.RC6 #define EN PORTCbits.RC7 unsigned int ADC; void Lcd_configure (void); void Lcd_Write_Command (char command); void Lcd_Write_Data (char data); 23 void Lcd_configure (void) { Lcd_Write_Command(0x03); Lcd_Write_Command(0x38); Lcd_Write_Command(0x06); Lcd_Write_Command(0x0c); } void Lcd_Write_Command (char command ) { RS=0; RW=0; EN=1; DATA = command; EN= 0; Delay1KTCYx(5); } void Lcd_Write_Data (char data) { RS=1; RW=0; EN=1; DATA=data; EN=0; Delay1KTCYx(5); } void main () { float dienap; int nhietdo; TRISA=0X01; TRISC=0b00000000; TRISD=0b00000000; ADCON1=0X0F; Lcd_configure(); ADC=1234; 24 OpenADC( ADC_FOSC_16 & ADC_RIGHT_JUST & ADC_4_TAD, ADC_CH1 & ADC_INT_OFF& ADC_VREFPLUS_VDD& ADC_VREFMINUS_VSS, 13 ); while(1) { while(BusyADC()); ConvertADC(); while(BusyADC()); ADC = ReadADC(); dienap =((float)ADC*5)/1023; nhietdo=(int)(dienap*100); Lcd_Write_Command (0x80 ); Lcd_Write_Data ((nhietdo/100)+0X30) ; Lcd_Write_Data ((nhietdo%100)/10+0x30); Lcd_Write_Data ((nhietdo%100)%10+0x30); Lcd_Write_Data (0xDf); Lcd_Write_Data ('C'); Delay10KTCYx(5); } } Bài 03 Thiết kê đo điện áp kênh AN5 hiển thị LCD #include #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF 25 #pragma config LVP=OFF #define DATA PORTD #define RS PORTCbits.RC5 #define RW PORTCbits.RC6 #define EN PORTCbits.RC7 unsigned int ADC; void Lcd_configure (void); void Lcd_Write_Command (char command); void Lcd_Write_Data (char data); void Lcd_configure (void) { Lcd_Write_Command(0x03); Lcd_Write_Command(0x38); Lcd_Write_Command(0x06); Lcd_Write_Command(0x0c); } void Lcd_Write_Command (char command ) { RS=0; RW=0; EN=1; DATA = command; EN= 0; Delay1KTCYx(5); } void Lcd_Write_Data (char data) { RS=1; RW=0; EN=1; DATA=data; EN=0; Delay1KTCYx(5); } 26 void main () { float dienap; int dienap2; TRISE=0X01; TRISC=0b00000000; TRISD=0b00000000; ADCON1=0X0F; Lcd_configure(); ADC=1234; OpenADC( ADC_FOSC_16 & ADC_RIGHT_JUST & ADC_4_TAD, ADC_CH5 & ADC_INT_OFF& ADC_VREFPLUS_VDD& ADC_VREFMINUS_VSS, 14 ); while(1) { while(BusyADC()); ConvertADC(); while(BusyADC()); ADC = ReadADC(); dienap =((float)ADC*5)/1023; dienap2=(int)(dienap*100); Lcd_Write_Command (0x80 ); Lcd_Write_Data ((dienap2/100)+0X30) ; Lcd_Write_Data ('.'); Lcd_Write_Data ((dienap2%100)/10+0x30); Lcd_Write_Data ((dienap2%100)%10+0x30); } } 27 Bài 04 Thiết kế đo nhiệt độ sử dụng cảm biến LM35 kênh AN6 hiển thị LCD #include #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF #pragma config LVP=OFF #define DATA PORTD #define RS PORTCbits.RC5 #define RW PORTCbits.RC6 #define EN PORTCbits.RC7 unsigned int ADC; void Lcd_configure (void); void Lcd_Write_Command (char command); void Lcd_Write_Data (char data); void Lcd_configure (void) { Lcd_Write_Command(0x03); Lcd_Write_Command(0x38); Lcd_Write_Command(0x06); Lcd_Write_Command(0x0c); } void Lcd_Write_Command (char command ) { RS=0; RW=0; EN=1; DATA = command; EN= 0; Delay1KTCYx(5); } void Lcd_Write_Data (char data) 28 { RS=1; RW=0; EN=1; DATA=data; EN=0; Delay1KTCYx(5); } void main () { float dienap; int nhietdo; TRISE=0X02; TRISC=0b00000000; TRISD=0b00000000; ADCON1=0X0F; Lcd_configure(); ADC=1234; OpenADC( ADC_FOSC_16 & ADC_RIGHT_JUST & ADC_4_TAD, ADC_CH6 & ADC_INT_OFF& ADC_VREFPLUS_VDD& ADC_VREFMINUS_VSS, 13 ); while(1) { while(BusyADC()); ConvertADC(); while(BusyADC()); ADC = ReadADC(); dienap =((float)ADC*5)/1023; nhietdo=(int)(dienap*100); Lcd_Write_Command (0x80 ); 29 Lcd_Write_Data ((nhietdo/100)+0X30) ; Lcd_Write_Data ((nhietdo%100)/10+0x30); Lcd_Write_Data ((nhietdo%100)%10+0x30); Lcd_Write_Data (0xDf); Lcd_Write_Data ('C'); Delay10KTCYx(5); } } Thiết kế ứng dụng với PWM Bài 01 Lập trình tạo xung PWM sử dụng CCP1, xung PWM có độ rộng TON 70%, tần số 1KHz, FOSC = 4MHz #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF void main(void) { TRISC=0X00; ADCON1=0X0F; T2CONbits.T2CKPS1=1; T2CONbits.T2CKPS0=1; OpenPWM1(62); SetDCPWM1(175); while(1); } Bài 02 Lập trình tạo xung PWM sử dụng CCP1, xung PWM có độ rộng TON 40%, tần số 500Hz, FOSC = 8MHz #include #include 30 #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF void main(void) { TRISC=0X00; ADCON1=0X0F; T2CONbits.T2CKPS1=1; T2CONbits.T2CKPS0=1; OpenPWM1(62); SetDCPWM1(175); while(1); } Bài 03 Lập trình tạo xung PWM sử dụng CCP2, xung PWM có độ rộng TON 40%, tần số 500Hz, FOSC = 4MHz #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF #pragma config CCP2MX=PORTC void main(void) { TRISC=0X00; ADCON1=0X0F; T2CONbits.T2CKPS1=1; T2CONbits.T2CKPS0=1; OpenPWM2(124); SetDCPWM2(200); while(1); } 31 Bài 04 Lập trình cho điều khiển mô tơ DC sử dụng PWM với yêu cầu: - Nhấn nút ON TON = 50% - Nhấn nút OFF TON = - Nhấn nút UP TON tăng 5%(tăng tối đa 100%) - Nhấn nút DOWN TON giảm 5%(giảm tối đa 20%) #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF #pragma config CCP2MX=PORTC #define ON PORTDbits.RD0 #define OFF PORTDbits.RD1 #define UP PORTDbits.RD2 #define DOWN PORTDbits.RD3 int x; void main(void) { TRISC=0X00; ADCON1=0X0F; TRISD=0XFF; T2CONbits.T2CKPS1=1; T2CONbits.T2CKPS0=1; OpenPWM2(124); // Chon F=1khz, Fosc=8MHz SetDCPWM2(250); while(1) { if(ON==0) { x=200; SetDCPWM2(200); } if(OFF==0) 32 { x=0; SetDCPWM2(x); } if(UP==0) { x=x+50; SetDCPWM2(x); Delay10KTCYx(50); } if(DOWN==0) { x=x-50; SetDCPWM2(x); Delay10KTCYx(50); } } } 33 [...]... T1CONbits.T1CKPS0=0; TMR1H=0;TMR1L=0; Lcd_configure(); while(1) { bt=TMR1L;//BIT CAO bc=TMR1H;//BIT THAP sp=bc*256+bt; 20 Lcd_Write_Command (0xc5 ); Lcd_Write_Data ((sp/1000)+0X30) ; Lcd_Write_Data ((sp%1000)/100+0x30); Lcd_Write_Data (((sp%1000%100)/10)+0x30); Lcd_Write_Data (((sp%1000)%100)%10+0x30); } } 3 Thiết kế ứng dụng với ADC Bài 1 Thiết Bài kê bộ đo điện áp trên kênh AN0 và hiển thị trên LCD #include... T0CONbits.PSA=1; T0CONbits.T0SE=0; TMR0H=0;TMR0L=0; Lcd_configure(); while(1) { bt=TMR0L;//BIT CAO bc=TMR0H;//BIT THAP sp=bc*256+bt; Lcd_Write_Command (0xc5 ); Lcd_Write_Data ((sp/1000)+0X30) ; 18 Lcd_Write_Data ((sp%1000)/100+0x30); Lcd_Write_Data (((sp%1000%100)/10)+0x30); Lcd_Write_Data (((sp%1000)%100)%10+0x30); } } Bài 04 Lập trình đo tần số sử dụng Timer1 và hiển thị trên LCD Dải tần số đo được từ 0... config PBADEN=OFF #define LCD_DATA PORTD #define LCD_RS PORTCbits.RC0 #define LCD_RW PORTCbits.RC1 #define LCD_EN PORTCbits.RC2 unsigned int sp; void ngat_ngoai(void); #pragma code uu_tien _cao = 0x08 12 void ngat _cao( void) { ngat_ngoai(); //g?i đ?n CTCPVN } #pragma code #pragma interrupt ngat_ngoai void ngat_ngoai(void) { if (INTCON3bits.INT1IF==1) { sp++; } INTCON3bits.INT1IF=0; if (INTCON3bits.INT2IF==1)... kế ứng dụng với PWM Bài 01 Lập trình tạo xung PWM sử dụng CCP1, xung PWM có độ rộng TON là 70%, tần số là 1KHz, FOSC = 4MHz #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF void main(void) { TRISC=0X00; ADCON1=0X0F; T2CONbits.T2CKPS1=1; T2CONbits.T2CKPS0=1; OpenPWM1(62); SetDCPWM1(175); while(1); } Bài 02 Lập trình tạo... } Bài 03 Lập trình tạo xung PWM sử dụng CCP2, xung PWM có độ rộng TON là 40%, tần số là 500Hz, FOSC = 4MHz #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config PBADEN=OFF #pragma config CCP2MX=PORTC void main(void) { TRISC=0X00; ADCON1=0X0F; T2CONbits.T2CKPS1=1; T2CONbits.T2CKPS0=1; OpenPWM2(124); SetDCPWM2(200); while(1); } 31 Bài. .. config PBADEN=OFF #pragma config CCP2MX=PORTC void main(void) { TRISC=0X00; ADCON1=0X0F; T2CONbits.T2CKPS1=1; T2CONbits.T2CKPS0=1; OpenPWM2(124); SetDCPWM2(200); while(1); } 31 Bài 04 Lập trình cho bộ điều khiển mô tơ DC sử dụng PWM với yêu cầu: - Nhấn nút ON thì TON = 50% - Nhấn nút OFF thì TON = 0 - Nhấn nút UP thì TON tăng 5%(tăng tối đa 100%) - Nhấn nút DOWN thì TON giảm 5%(giảm tối đa về 20%) #include... Lcd_Write_Command(0x80); Lcd_Write_Data((sp/1000)+0x30); Lcd_Write_Data(((sp%1000)/100)+0x30); Lcd_Write_Data((((sp%1000)%100)/10)+0x30); Lcd_Write_Data((((sp%1000)%100)%10)+0x30); } } 2 Thiết kế ứng dụng với Timer Bài 01 Lập trình tạo xung 1KHz với thạch anh 4MHz, sử dụng Timer0 để tạo xung #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config... =((float)ADC*5)/1023; dienap2=(int)(dienap*100); Lcd_Write_Command (0x80 ); Lcd_Write_Data ((dienap2/100)+0X30) ; Lcd_Write_Data ('.'); Lcd_Write_Data ((dienap2%100)/10+0x30); Lcd_Write_Data ((dienap2%100)%10+0x30); } } Bài 02 Thiết kế bộ đo nhiệt độ sử dụng cảm biến LM35 và kênh AN1 hiển thị trên LCD #include #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON... Lcd_Write_Command (0x80 ); Lcd_Write_Data ((nhietdo/100)+0X30) ; Lcd_Write_Data ((nhietdo%100)/10+0x30); Lcd_Write_Data ((nhietdo%100)%10+0x30); Lcd_Write_Data (0xDf); Lcd_Write_Data ('C'); Delay10KTCYx(5); } } Bài 03 Thiết kê bộ đo điện áp trên kênh AN5 và hiển thị trên LCD #include #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON #pragma config... dienap2=(int)(dienap*100); Lcd_Write_Command (0x80 ); Lcd_Write_Data ((dienap2/100)+0X30) ; Lcd_Write_Data ('.'); Lcd_Write_Data ((dienap2%100)/10+0x30); Lcd_Write_Data ((dienap2%100)%10+0x30); } } 27 Bài 04 Thiết kế bộ đo nhiệt độ sử dụng cảm biến LM35 và kênh AN6 hiển thị trên LCD #include #include #include #pragma config OSC=HS #pragma config WDT=OFF #pragma config MCLRE=ON ... T2CONbits.T2CKPS1=1; T2CONbits.T2CKPS0=1; OpenPWM2(124); SetDCPWM2(200); while(1); } 31 Bài 04 Lập trình cho điều khiển mô tơ DC sử dụng PWM với yêu cầu: - Nhấn nút ON TON = 50% - Nhấn nút OFF TON... Lcd_Write_Data(*str); str++; } } unsigned int SP; void ngat_ngoai(void); #pragma code uu_tien _cao = 0x08 void ngat _cao( void) { ngat_ngoai(); } #pragma code #pragma interrupt ngat_ngoai void ngat_ngoai(void)... #define LCD_EN PORTCbits.RC2 unsigned int sp; void ngat_ngoai(void); #pragma code uu_tien _cao = 0x08 void ngat _cao( void) { ngat_ngoai(); } #pragma code #pragma interrupt ngat_ngoai void ngat_ngoai(void)

Ngày đăng: 16/11/2015, 08:44

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan