TỔNG HỢP CODE CHO BÀI THI GIỮA KÌ TT VI XỬ LÝ LẦN I1.. khi xuất lên led bị xóa số 0 vô nghĩa... Lcd Thư viện: "E:\TT_VXL_T.HOAN_ST2\TT VXL\TT VXL\ Thu Vien\TV_PICKIT2_SHIFT_LCD.c" Các hà
Trang 1TỔNG HỢP CODE CHO BÀI THI GIỮA KÌ TT VI XỬ LÝ LẦN I
1 Xử lý nút nhấn
if(inputcd(nutnhan)==0) xuat_32led_don_4byte(0,0,0,0);
2 Xử lý ma trận phím
Thư viện : "E:\TT_VXL_T.HOAN_ST2\TT VXL\TT VXL\Thu Vien\TV_PICKIT2_SHIFT_KEY4X4_138.c"
Xử lý:
MP=KEY_4X4_DW();
IF(MP=0X0A) XUAT_32LED_DON_4BYTE(0,0,0,MP);
3 Bồn led 7 đoạn trực tiếp
Xử lý:
XUAT_4LED_7DOAN_4SO( UNSIGNED INT BL743,BL742,BL741,BL740 );
=>Cách sử dụng:
-Sử dụng trực tiếp: XUAT_4LED_7DOAN_4SO( 0xff, MA7DOAN[t/100%10], MA7DOAN[t/10%10] , MA7DOAN[t%10] );
-Sử dụng gián tiếp: tách số, giải mã rồi mới dùng.
XUAT_4LED_7DOAN_GIAIMA_XOA_SO0 ( t ) ;
Trong đó: t là số có 1,2,3 hoặc 4 chữ số khi xuất lên led bị xóa số 0 vô nghĩa.
4 Counter
Xử lý:
Đặt 2 dòng code này sau SET_UP_PORT_IC_CHOT(); với a là giá trị đặt trước:
setup_timer_0(T0_EXT_L_TO_H|T0_DIV_1 );
SET_TIMER0(a);
Sau đó xử lý trong while(true): bao gồm đọc kết quả trả về cũng như khống chế số đếm
sp = get_timer0();
if(sp>b){sp=a; SET_TIMER0(a );}
Muốn tắt counter thì dùng lệnh:
setup_timer_0(T0_OFF);
5 Tám led 7 đoạn quét
Nhất thiết phải xử lí led quét trong while(true)
Có 3 cách xử lý:
Cách 1: chọn vị trị hiển thị bằng mã và số hiển thị:
XUAT_8LED_7DOAN_QUET_1( 0x7f, MA7DOAN[9] );
delay_ms(1);
XUAT_8LED_7DOAN_QUET_1(0xff, 0xff);
Trang 2Trong đó mã led: xem bài mẫu 501 trang 95
Cách 2: chọn vị trị hiển thị bằng số và số hiển thị:
XUAT_8LED_7DOAN_QUET_2( 0, MA7DOAN[9] );
delay_ms(1);
XUAT_8LED_7DOAN_QUET_2( 0 , 0xff);
Cách 3: giải mã từng led rồi xuất ra hết:
Void giaima()
{
LED_7DQ[ 0 ]= MA7DOAN [ a%10 ];
LED_7DQ[ 1 ]= MA7DOAN [ a/10%10 ];
LED_7DQ[ 2 ]= MA7DOAN [ a/100%10 ];
LED_7DQ[ 3 ]= MA7DOAN [ a/1000%10 ];
}
HIEN_THI_8LED_7DOAN_QUET_ALL();
Cách này được ứng dụng cao nhất trong 3 cách.
Tắt hết: XUAT_8LED_7DOAN_QUET_TAT_LED();
6 Timer
Xử lý:
Sau thư viện hàm:
SIGNED INT8 BDN;
#int_timer1
void ngatt1()
{
SET_TIMER1(29411);
BDN++;
}
Sau SET_UP_PORT_IC_CHOT();
SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_8);
SET_TIMER1(29411);
ENABLE_INTERRUPTS(GLOBAL);
ENABLE_INTERRUPTS(INT_TIMER1);
Trong while(true)
If(BDN>=5)
{
BDN=BDN-5;
// Xử lý công việc khi định thời đủ thời gian yêu cầu.
}
Else
Trang 3{
// Xử lý công việc khác khi chưa định thời đủ
}
Định thời gian 0.5s: 3036
7 Lcd
Thư viện: "E:\TT_VXL_T.HOAN_ST2\TT VXL\TT VXL\ Thu Vien\TV_PICKIT2_SHIFT_LCD.c"
Các hàm:
Khởi tạo lcd: SETUP_LCD (); Ta luôn gọi chương trình này ngay sau dòng SET_UP_PORT_IC_CHOT() để cấu hình cho LCD.
Di chuyển con trỏ: LCD_GOTO_XY(hang, cot);
Xuất mã điều khiển ra lcd: LCD_COMMAND(lenh); ( xem các lệnh trong thư viện)
Xuất dữ liệu ra lcd: LCD_DATA(dulieuhienthi) ; trong đó dữ liệu hiển thị phải được mã hóa sang mã ASCII Đối với kí tự thì thêm vào ’ ’ ,chuỗi thì thêm vào “”, số thì +0x30, kí tự A<B<C<D…<F thì +0x37, các kí tự đặc biệt thì tra bảng mã.(ví dụ dấu độ 0xDF)
Vd:
LCD_DATA(t/1000%10+ 0x30);
LCD_DATA(t/100%10+ 0x30);
LCD_DATA(t/10%10+ 0x30);
LCD_DATA(t%10+ 0x30);
LCD_DATA(“LAM QUOC KIET”);
8 Lcd kí tự tự tạo
Tự tạo kí tự: xem bài 635 tạo apple làm mẫu
Tạo số phông lớn: sl(số,x,y) ;
Vd:
sl(i/10, 1, 7);
sl(i%10, 1, 10);
9 Glcd
Thư viện: "E:\TT_VXL_T.HOAN_ST2\TT VXL\TT VXL\Thu Vien\TV_PICKIT2_SHIFT_GLCD128X64.c"
"C:\Program Files (x86)\PICC\Drivers\ GRAPHICS.C"
Trang 4Xử lí:
Thiết lập chế độ text: SETUP_GLCD (0x30);
Xuất mã điều khiển rag lcd: GLCD_COMMAND(Lenh); Xuất kĩ tự ra glcd: GLCD_DATA(kytu);
Thiết lập chế độ graphics: SETUP_GLCD (0x36);
Xóa màu nền: GLCD_MAU_NEN(mau); //màu 0
Cho phép hiển thị ra màn hình : cực kì quan trọng : GDRAM_VDK_TO_GDRAM_GLCD_ALL() ;
Xuất logo spkt: GLCD_XUAT_ANH(int width,int height,int x,int y); 64, 64, 63, 0.
Một số lệnh từ thư viện graphics:
glcd_line(x1, y1, x2, y2, color);
glcd_rect(x1, y1, x2, y2, fill, color);
glcd_bar(x1, y1, x2, y2, width, color);
glcd_circle(x, y, radius, fill, color);
10 Adc
Xử lí chung:
Đặt 2 dòng code này sau SET_UP_PORT_IC_CHOT();
setup_adc(ADC_CLOCK_DIV_32);
setup_adc_ports(AN0_TO_AN2|VSS_VDD);
Xử lí cảm biến lm35:
set_adc_channel(0);
kq1=0;
for(n=0;n<solan;n++)
{
kq1= kq1+ read_adc();
}
kq1 = kq1/2.046;
kq1 = kq1/solan;
Trang 5Xử lí cảm biến khoảng cách:
Thếm thư viện #include"math.h"
set_adc_channel(2);
kq3 = read_adc();
kq3 = pow(4277/kq3,1.106);
if(kq3>80) kq3=80;
Lưu ý: các giá trị cảm biến phải khai báo biến int16 Một số lệnh kèm theo điều khiển các module liên quan:
Tắt hoặc mở đèn nung nóng thay đổi nhiệt độ lm35: TRIAC_2_OFF();
TRIAC_2_ON();
Tắt hoặc mở chuông: gặp yêu cầu này thay bằng tắt hoặc mở 32 led đơn.
BUZZER_ON();
BUZZER_OFF();