7
1. Viết chương trình tạo timer chu kỳ chuẩn 100ms,điều khiển led tai chân B0,sáng 5s,tắt 10s GIAI #include <18F4431.h> #use delay(clock=20000000) #define led1 PIN_B0 int8 dem; #INT_TIMER1 Void ngat_timer1( ) { set_timer1(3036); if(dem<150) dem++; else dem=0; } void main() { set_tris_b(0x00); output_b(0x00); enable_interrupts(GLOBAL); enable_interrupts(INT_timer1); setup_timer_1(T1_DIV_BY_8|T1_INTERNAL); set_timer1(3036); dem=0; ngat_timer1( ); while(TRUE) { if(dem<=50) { output_high(led1); } else { if(dem>50) { output_low(led1); }

Viết Chương Trình Tạo Timer Chu Kỳ Chuẩn 100ms

  • Upload
    ti-ger

  • View
    216

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Viết Chương Trình Tạo Timer Chu Kỳ Chuẩn 100ms

1. Viết chương trình tạo timer chu kỳ chuẩn 100ms,điều khiển led tai chân B0,sáng 5s,tắt 10s

GIAI#include <18F4431.h>#use delay(clock=20000000)#define led1 PIN_B0int8 dem;#INT_TIMER1Void ngat_timer1( ){ set_timer1(3036); if(dem<150) dem++; else dem=0; }void main(){ set_tris_b(0x00); output_b(0x00); enable_interrupts(GLOBAL); enable_interrupts(INT_timer1); setup_timer_1(T1_DIV_BY_8|T1_INTERNAL); set_timer1(3036); dem=0; ngat_timer1( ); while(TRUE) { if(dem<=50) { output_high(led1); } else { if(dem>50) { output_low(led1); } } } }

Page 2: Viết Chương Trình Tạo Timer Chu Kỳ Chuẩn 100ms

Viết chương trình tạo timer chu kỳ chuẩn 50ms,điều khiển đếm ngược thời gian 30:30 (phút/ giây) hiển thị trên led 7 đoạn Nhấn Start: Bắt đầu đếm ngược Nhấn Stop: Dừng Nhấn Reset: Cài lại giá trị 30:30

#include <18F4431.h>#fuses HS,NOWDT,NOPROTECT,NOLVP#use delay(clock=20000000)#define Q1 PIN_D0#define Q2 PIN_D1#define Q3 PIN_D2#define Q4 PIN_D3#DEFINE START PIN_E0#DEFINE STOP PIN_E1#DEFINE RESET PIN_E2

unsigned int8 Phut,giay, DEM_NGAT;INT1 RUN;unsigned int8 D[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void Time_display(){ unsigned int8 chuc_phut, chuc_giay, donvi_phut, donvi_giay; donvi_phut=phut%10; chuc_phut=phut/10; donvi_giay=giay%10; chuc_giay=giay/10; OUTPUT_LOW(Q1); OUTPUT_LOW(Q2); OUTPUT_LOW(Q3); OUTPUT_LOW(Q4); OUTPUT_c(D[CHUC_PHUT]); OUTPUT_HIGH(Q1); DELAY_MS(5); OUTPUT_LOW(Q1); OUTPUT_c(D[DONVI_PHUT]-128); OUTPUT_HIGH(Q2); DELAY_MS(5); OUTPUT_LOW(Q2); OUTPUT_c(D[CHUC_GIAY]); OUTPUT_HIGH(Q3);

Page 3: Viết Chương Trình Tạo Timer Chu Kỳ Chuẩn 100ms

DELAY_MS(5); OUTPUT_LOW(Q3); OUTPUT_c(D[DONVI_GIAY]); OUTPUT_HIGH(Q4); DELAY_MS(5); OUTPUT_LOW(Q4); }

#INT_TIMER1VOID NGAT_TIMER1(){ SET_TIMER1(34286); IF (RUN==1) { IF(DEM_NGAT<19) DEM_NGAT++; ELSE { DEM_NGAT=0; IF(GIAY>0) GIAY--; ELSE { IF(PHUT>0) { PHUT--; GIAY=59; } } } }}

VOID MAIN(){ set_tris_c(0); set_tris_D(0); set_tris_E(0xFF); output_E(255); SETUP_TIMER_1(T1_DIV_BY_8|T1_INTERNAL); SET_TIMER1(34286); ENABLE_INTERRUPTS(GLOBAL); ENABLE_INTERRUPTS(INT_TIMER1); PHUT=30; GIAY=30;

Page 4: Viết Chương Trình Tạo Timer Chu Kỳ Chuẩn 100ms

RUN=0; while(TRUE) { if (!input(START)) { RUN=1; DEM_NGAT=0; } if (!input(STOP)) { RUN=0; } if (!input(RESET)) { RUN=0; PHUT=30; GIAY=30; } Time_display(); }}

Viết chương trình đọc giá trị nhiệt độ tại hai kênh AN0,AN1 hiển thị lên màn hình LCD và điều khiển LCD tại port B như sau:

Page 5: Viết Chương Trình Tạo Timer Chu Kỳ Chuẩn 100ms

Nếu t1<30 và t2>50 =>D1 sángNếu t1<50 và t2<30 =>D2 sángNếu t1>50 và t2>50 =>D1 và D2 sángNếu t1<30 và t2>30 =>D1 và D2tắt#include<18f4431.h>#use delay(clock=20000000)#define LCD_ENABLE_PIN PIN_D2 ////#define LCD_RS_PIN PIN_D0 ////#define LCD_RW_PIN PIN_D1 ////#define LCD_DATA4 PIN_D4 ////#define LCD_DATA5 PIN_D5 ////#define LCD_DATA6 PIN_D6 ////#define LCD_DATA7 PIN_D7

#DEFINE D1 PIN_B0#DEFINE D3 PIN_B2#DEFINE D5 PIN_B4

#include<lcd.c>#use rs232(baud=9600)void main(){ INT T1; SET_TRIS_A(255); SETUP_ADC(ADC_CLOCK_DIV_32); SETUP_ADC_PORTS(SAN0|SAN1|VREF_VREF); LCD_init(); LCD_GOTOXY(1,1); LCD_PUTC(" DIEU KHIEN NHIET DO"); LCD_GOTOXY(1,2); LCD_PUTC("======================"); while(true) { SET_ADC_CHANNEL(0); T1=READ_ADC(); LCD_GOTOXY(21,1); PRINTF(LCD_PUTC," Nhiet do: %u do C", T1); IF(T1>=1 && T1<=10) { OUTPUT_HIGH(D1); OUTPUT_LOW(D3); OUTPUT_LOW(D5); } ELSE IF(T1>=11 && T1<=30) {

Page 6: Viết Chương Trình Tạo Timer Chu Kỳ Chuẩn 100ms

OUTPUT_HIGH(D1); OUTPUT_HIGH(D3); OUTPUT_LOW(D5); } ELSE IF(T1>30) { OUTPUT_HIGH(D1); OUTPUT_HIGH(D3); OUTPUT_HIGH(D5); } }}

Cho sơ đồ mạch(Led sử dụng cathod chung),viết chương trình đếm số thứ tự và hiển thị ra led 7 đoạn theo quy tắc sau:Nhấn Start tăng giá trị đếm 1 đơn vịNhấn Stopgiảm giá trị đếm 1 đơn vịNhấn Cleat đưa giá trị về đếm 0(Lưu ý : Giá trị đếm bắt đầu là 0 và không có số âm)