1. Trang chủ
  2. » Giáo án - Bài giảng

TẬP LỆNH CCS c CHO PIC16F877A

60 874 5

Đ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

Cấu trúc

  • TẬP LỆNH CCS C CHO PIC16F877A

  • BÀI 7: ANALOG (ADC) CỦA PIC TRONG CCS

  • BÀI 8: GIAO TIẾP LM35 PIC16F877A TRONG CCS

  • BÀI 9: KHỞI TẠO PWM TRONG PIC 16F877A VỚI CCS

    • I. Module CCP (Capture / Campare / PWM) là gì?

    • CCP (Capture/Compare/PWM) bao gồm các thao tác trên các xung đếm cung cấp bởi các bộ đếm Timer1 và Timer2. PIC16F877A được tích hợp sẵn hai khối CCP: CCP1 và CCP2. Mỗi CCP có một thanh ghi 16 bit (CCPR1H:CCPR1L và CCPR2H:CCPR2L), pin điều khiển dùng cho khối CCPx là RC2/CCP1 và RC1/T1OSI/CCP2. Các chức năng của CCP bao gồm:

    • - Capture.

    • - So sánh (Compare).

    • - Điều chế độ rộng xung PWM (Pulse Width Modulation).

    • Cả CCP1 và CCP2 về nguyên tắc hoạt động đều giống nhau và chức năng của từng khối là khá độc lập. Tuy nhiên trong một số trường hợp ngoại lệ CCP1 và CCP2 có khả năng phối hợp với nhau để để tạo ra các hiện tượng đặc biệt (Special event trigger) hoặc các tác động lên Timer1 và Timer2. Các trường hợp này được liệt kê trong bảng sau: 

    • Bài này chúng ta sẽ tìm hiểu về chế độ PWM.

    • II. Chế độ PWM.

    • PWM (Pulse Width Modulation) có thể tạo ra tín hiệu tần số và chu kỳ khác nhau trên một hoặc nhiều chân đầu ra hay còn thường gọi là điều chế độ rộng xung.

    • Quá trình hoạt động của chức năng PWM như sau: 

    • Hình 1. Sơ đồ khối CCP (PWM mode)

    • Khi hoạt động ở chế độ PWM (Pulse Width Modulation _ khối điều chế độ rộng xung), tín hiệu sau khi điều chế sẽ được đưa ra các pin của khối CCP (cần ấn định các pin này là output). Để sử dụng chức năng điều chế này trước tiên ta cần tiến hành các bước cài đặt sau:

    • B1: Thiết lập thời gian của 1 chu kì của xung điều chế cho PWM (period) bằng cách đưa giá trị thích hợp vào thanh ghi PR2.

    • B2: Thiết lập độ rộng xung cần điều chế (duty cycle) bằng cách đưa giá trị vào thanh ghi CCPRxL và các bit CCP1CON<5:4>.

    • B3: Điều khiển các pin của CCP là output bằng cách clear các bit tương ứng trong thanh ghi TRISC.

    • B4: Thiết lập giá trị bộ chia tần số prescaler của Timer2 và cho phép Timer2 hoạt động bằng cách đưa giá trị thích hợp vào thanh ghi T2CON.

    • B5: Cho phép CCP hoạt động ở chế độ PWM.

    • Quá trình hoạt động của chức năng PWM như sau:

    • - Với PIC 16F877A chúng ta có 2 chân điều chế độ rộng xung là CCP1 và CCP2, sau chọn chức năng PWM bằng cách điều khiển 4 bít thấp của thanh ghi CCPxCON, chúng ta sẽ nạp giá trị cho thanh ghi PR2 và thanh ghi CCPRx. Khi Timer2 hoạt động giá trị của thanh TMR2 sẽ tăng cho đến khi bằng giá trị của thanh ghi PR2 lúc này chân CCPx tương ứng sẽ lên mức 1 đồng thời thanh ghi TMR2 sẽ bị xoá về giá trị ban đầu. Mức 1 tại chân CCPx sẽ được dữ cho đên khi giá trị thanh ghi TMR2 bằng giá tri thanh ghi CCPRx sau đó chân CCPx lại trở về 0 cho đến khi giá trị thanh ghi TMR2=PR2 cứ như vậy quá trình sẽ lặp lại như ban đầu.- Như vậy chúng ta có thể rút ra như sau: Chu kì xung là khoảng thời gian để giá trị thanh ghi TMR2 tăng đến giá trị thanh ghi PR2 Khoảng xung dương là khoảng thời gian để thanh ghi TMR2 tăng đến giá trị thanh ghi CCPRx Để hiểu rõ hơn chúng ta có thể xem trong sơ đồ sau:

    • Hình 3. Các tham số của PWM

    • Trong đó giá trị 1 chu kì (period) của xung điều chế được tính bằng công thức:

    •  PWM period = [(PR2)+1]*4*TOSC*(giá trị bộ chia tần số của TMR2)

    • Bộ chia tần số prescaler của Timer2 chỉ có thể nhận các giá trị 1,4 hoặc 16 (xem lại Timer2 để biết thêm chi tiết). Khi giá trị thanh ghi PR2 bằng với giá trị thanh ghi TMR2 thì quá trình sau xảy ra:

    • - Thanh ghi TMR2 tự động được xóa.

    • -  Pin của khối CCP được set.

    • - Giá trị thanh ghi CCPR1L (chứa giá trị ấn định độ rộng xung điều chế duty cycle) được đưa vào thanh ghi CCPRxH.

    • Độ rộng của xung điều chế (duty cycle) được tính theo công thức:

    •  PWM duty cycle = (CCPRxL:CCPxCON<5:4>)*TOSC*(giá trị bộ chia tần số TMR2)

    • Như vậy 2 bit CCPxCON<5:4> sẽ chứa 2 bit LSB. Thanh ghi CCPRxL chứa byte cao của giá trị quyết định độ rộng xung. Thanh ghi CCPRxH đóng vai trò là buffer cho khối PWM. Khi giá trị trong thanh ghi CCPRxH bằng với giá trị trong thanh ghi TMR2 và hai bit CCPxCON<5:4> bằng với giá trị 2 bit của bộ chia tần số prescaler, pin của khối CCP lại được đưa về mức thấp, như vậy ta có được hình ảnh của xung điều chế tại ngõ ra của khối PWM như hình 3.

    • Ví dụ:

    • Với value la kiểu 8bit:

    •  %duty = (value/(PR2 +1))*100%

    • ==> value =(duty%*(PR2+1))/100% 

    • (value = 128 = 50% duty)

    • Với value kiểu 16bit:

    •  %duty = (value & 1023)/(4*(PR2 +1))*100%

    • Một số điểm cần chú ý khi sử dụng khối PWM:

    • Timer2 có hai bộ chia tần số prescaler và postscaler. Tuy nhiên bộ postscaler không được sử dụng trong quá trình điều chế độ rộng xung của khối PWM.

    • Nếu thời gian duty cycle dài hơn thời gian chu kì xung period thì xung ngõ ra tiếp tục được giữ ở mức cao sau khi giá trị PR2 bằng với giá trị TMR2.

    • III. CCP (Capture/Compare/PWM) trong CCS

    •  - Xác định chu kì: 

    •  setup_timer_2(Prescaler,PR2, postscaler);

    • Mode: có thể kết hợp với nhau bằng đấu “ | ”

    • - T2_DISABLED: tắt hoạt động của Timer2    

    • - T2_DIV_BY_1: Sử dụng bộ chia tần với tỉ lệ 1:1 

    • - T2_DIV_BY_4: Sử dụng bộ chia tần với tỉ lệ 1:4

    • - T2_DIV_BY_16: Sử dụng bộ chia tần với tỉ lệ 1:16

    • Period: số nguyên từ 0_255 xác định giá trị xung reset

    • Postcale: xác định số reset trước khi ngắt

    • Xem thêm các lệnh tại bài viết Timer/Counter

    • - Thiết lập PWM:

    •  setup_CCPx(mode);

    • Dùng trước tiên để thiết lập chế độ hoạt động hãy vô hiệu hóa các chức năng của CCPx

    • X: tên chân CCP trên vdk (pic16f877a là RC1-CCP2, RC2-CCP1)

    • Mode: CCP_PWM (bật chế độ PWM)

    • - Xác định độ rộng xung (duty)

    •  set_CCPx_duty(value);

    • X: tên chân CCP tren vdk

    • Value: giá trị 8bit hay 16bit, nó sẽ ghi 10bit vào thanh ghi CCPx, nếu value chỉ có 8bit thì nó sẽ dịch thêm 2bit nữa để đủ 10bit nạo vào CCPx. Tùy vào độ phân giải của value không phải lúc nào cũng đạt tới giá trị 1023. 

    • VD1: sau sẽ tạo ra xung tần số 100khz với độ rộng xung là 30%. void main() {     unsigned char str[20];     LCD_Init();     sprintf(str,"DEMO PWM");     delay_ms(10);     LCD_Puts(str);     delay_ms(1000);     LCD_Clear();     sprintf(str,"beelab.info");     LCD_Gotoxy(0,0);     LCD_Puts(str);     setup_timer_2(T2_DIV_BY_1,49,1);     setup_ccp1(CCP_PWM);     set_pwm1_duty(15);     while(TRUE) { }   } 

    • VD2: sau sẽ tạo ra xung tần số 20khz với độ rộng xung là thay đổi (OSC=20MHz) #include <lcd.c> int16 duty; void main() {    setup_timer_2(T2_DIV_BY_1,249,1);      //50.0 us ~ f=0.02MHz ~ f= 20 kHz   //chu ki PWM = (PR2 (8bit) + 1)*4*Tosc * ti le chia TMR2    setup_ccp1(CCP_PWM);    set_pwm1_duty(512);//1024*25%    lcd_init();     while(TRUE)   {       //TODO: User Code      for(int i=0;i<100;i++)       {          duty=duty+10;          set_pwm1_duty(duty);          delay_ms(50);       }       duty=0;    } }

  • BÀI 12: ĐỌC XUNG BẰNG NGẮT CỦA PIC TRONG CCS - Đo tốc độ (số xung Encoder trong 1s) dùng PIC17F877A + CCS

  • BÀI 14: CẢM BIẾN NHIỆT ĐỘ ĐỘ ẨM PIC16F877A CCS

  • BÀI TẬP MẪU ĐẶC BIỆT CỦA VI ĐIỀU KHIỂN PIC16F877A

Nội dung

TẬP LỆNH CCS C CHO PIC16F877A MICROCHIPCONTROLLER - VI ĐIỀU KHIỂN 10:07:00 PM I GIỚI THIỆU VỀ TRÌNH DỊCH CCS C: • • • - CCS trình biên dịch dùng ngơn ngữ C lập trình cho VĐK Đây ngơn ngữ lập trình đầy sức mạnh, giúp bạn nhanh chóng việc viết chương trình Assembly - CCS chứa nhiều hàm phục vụ cho mục đích có nhiều cách lập trình mà cho vấn đề với tốc độ thực thi độ dài chương trình khác Sự tối ưu kĩ lập trình người - CCS cung cấp cơng cụ tiện ích giám sát hoạt động chương trình như: C/ASM list: cho phép m$ ASM file bạn biên dịch , giúp bạn quản lý nắm rõ cách thức sinh , cơng cụ quan trọng giúp bạn gỡ rối chương trình SYMBOL: hiển thị nhớ cấp phát cho biến , giúp bạn quản lý nhớ biến của chương trình CALLTREE: hiển thị phân bổ nhớ II CHỈ THỊ TIỀN XỬ LÝ: 1) #include: - Cú pháp: #include Filename: tên file cho thiết bị *.h, *.c Chỉ định đường dẫn cho trình biên địch, ln phải có để khai báo chương trình viết cho VĐK phảI ln đặt dòng VD: #include 2) #bit: - Cú pháp: bit name = x.y Name: tên biến X: biến C(8,16,32…bit) hay hắng số địa ghi Y: vị trí bit x Tạo biến 1bit đặt byte x vị trí y tiện dùng kiểm tra hay gán giá trị cho ghi VD : #Bit TMR1IF = 0x0B.2; 3) #byte : - Cú pháp: #byte name = x Name: tên biến X:địa Gán tên biến name cho địa x , name thường dùng để gán cho ghi VD : #Byte portb = 0x06; 4) #define: - Cú pháp: #define name text Name: tên biến Text : chuỗi hay số VD : #Define A 12345 5) #use: - Cú pháp: #use delay(clock = speed) Speed: tốc độ dao động thạch anh Có thị dùng hàm delay_ms delay_us VD: #use delay(clock = 4000000); 6) #use fast_io: - Cú pháp: #use fast_io(port) Port : cổng vào PIC( từ A-G) Dùng điều chỉnh port với lệnh VD: # use fast_io(a); III Các hàm delay: 1) delay_ms(time) Time: giá trị thời gian cần tạo trễ VD : delay_ms(1000); // trễ 1s 2) delay_us(time) Time: giá trị thời gian cần tạo trễ VD : delay_us(1000); // trễ 1ms Hàm delay không sử dụng Timer mà nhóm lệnh vơ nghĩa thực khoảng thời gian bạn đ$ định sẵn Trước sử dụng hàm cần phảI khai báo tiền định #use_delay(….) IV Các hàm vào CCS C 1) Output_low(pin) – Output_high(pin) Thiết lập mức 0v(low) 5v(high) cho chân PIC VD : output_low(pin_D0) ; 2) Output_bit(pin,value) Pin: tên chân PIC Value: giá trị hay VD: output_bit(pin_C0,1); 3) Output_X(value) X: tên port chíp Value: giá trị byte VD: output_B(255); 4) Input_X( ) X: tên port chip Hàm trả giá trị bit giá trị hữu port VD: n = input_A( ); 5) Set_tris_X(value) X: tên chân (A – G) Value: giá trị bít điều khiển vào cho chân chip 1: nhập liệu 0: xuất liệu VD: set_tris_B(0); // tất chân portb ngõ V Hàm sử dụng Timer: TIMER0: SETUP_TIMER_0(mode); Mode: constant (nếu dùng chèn dấu “ | ” giữa) đ-ợc định nghĩa file - RTCC_INTERNAL: chọn xung dao động nội - RTCC_EXT_H_TO_L: chọn kiểu tác động cạch xuống xung - RTCC_EXT_L_TO_H: chọn kiểu tác động cạch lên xung - RTCC_DIV_2 : Sử dụng chia tần với tỉ lệ 1:2 - RTCC_DIV_4 : Sử dụng chia tần với tỉ lệ 1:4 - RTCC_DIV_8 : Sử dụng chia tần với tỉ lệ 1:8 - RTCC_DIV_16 : Sử dụng chia tần với tỉ lệ 1:16 - RTCC_DIV_32 : Sử dụng chia tần với tỉ lệ 1:32 - RTCC_DIV_64 : Sử dụng chia tần với tỉ lệ 1:64 - RTCC_DIV_128 : Sử dụng chia tần với tỉ lệ 1:128 - RTCC_DIV_256 : Sử dụng chia tần với tỉ lệ 1:256 setup_COUNTER_0 (rtcc_state , ps_state) Rtcc_state: - RTCC_INTERNAL: chọn xung dao động nội - RTCC_EXT_H_TO_L: chọn kiểu tác động cạch xuống xung - RTCC_EXT_L_TO_H: chọn kiểu tác động cạch lên xung Ps_state: - RTCC_DIV_2 : Sử dụng chia tần với tỉ lệ 1:2 - RTCC_DIV_4 : Sử dụng chia tần với tỉ lệ 1:4 - RTCC_DIV_8 : Sử dụng chia tần với tỉ lệ 1:8 - RTCC_DIV_16 : Sử dụng chia tần với tỉ lệ 1:16 - RTCC_DIV_32 : Sử dụng chia tần với tỉ lệ 1:32 - RTCC_DIV_64 : Sử dụng chia tần với tỉ lệ 1:64 - RTCC_DIV_128 : Sử dụng chia tần với tỉ lệ 1:128 - RTCC_DIV_256 : Sử dụng chia tần với tỉ lệ 1:256 set_timer0(value) xác định giá trị bit ban đầu Timer0(value=TMR0) GET_TIMER0( ) trả lại giá trị bit cho Timer0 TIMER1: SETUP_TIMER_1(mode); Mode: kết hợp với đấu “ | ” - T1_DISABLED : tắt hoạt động Timer1 - T1_INTERNAL : sử dụng giao động nội - T1_EXTERNAL : chọn xung clock chân RC0 - T1_EXTERNAL_SYNC : chọn xung lock đồng - T1_DIV_BY_1 : Sử dụng chia tần với tỉ lệ 1:1 - T1_DIV_BY_2 : Sử dụng chia tần với tỉ lệ 1:2 - T1_DIV_BY_4 : Sử dụng chia tần với tỉ lệ 1:4 - T1_DIV_BY_8 : Sử dụng chia tần với tỉ lệ 1:8 set_timer0(value) xác định giá trị bit ban đầu Timer1(value=TMR1) GET_TIMER0( ) trả lại giá trị bit cho Timer1 TIMER2: SETUP_TIMER_1(mode , period , postcale); Mode: kết hợp với đấu “ | ” - T2_DISABLED: tắt hoạt động Timer2 - T2_DIV_BY_1: Sử dụng chia tần với tỉ lệ 1:1 - T2_DIV_BY_4: Sử dụng chia tần với tỉ lệ 1:4 - T2_DIV_BY_16: Sử dụng chia tần với tỉ lệ 1:16 Period: số nguyên từ 0_255 xác định giá trị xung reset Postcale: xác định số reset trước ngắt set_timer2(value); xác định giá trị bit ban đầu Timer2(value=TMR2) GET_TIMER2( ) trả lại giá trị bit cho Timer2 VI Các hàm phục vụ ngắt (Interupt) enable_interrupts( level) Level: +GLOBAL : cho phép ngắt toàn cục +INT_TIMER0 : ngắt tràn Timer0 +INT_TIMER1 : ngắt tràn Timer1 +INT_TIMER2 : ngắt tràn Timer2 +INT_RB : có thay đổi chân RB4 RB7 +INT_EXT : ngắt chân RB0 Chú ý : sau khai báo để vào chương trình ngắt cần khai báo #INT_ VD: #INT_TIMER1 void ngắt_Timer1() { //chương trình ngắt viết } VII Các hàm điều chế độ rộng xung (CCP-PWM) SETUP_CCPx(mode); Dùng trước hết để thiết lập chế độ hoạt động hay vơ hiệu hố tính CCP x: tên chân CCP chip (với PIC 16F877A chân RC1-CCP2 ; RC2-CCP1) Mode: CCP_PWM (bật chế độ PWM) SET_CCPx_DUTY(value) X: tên chân CCP chip Value: giá trị hay 16 bit - Nó ghi 10 bit giá trị vào ghi CCPx , value có bit dịch thêm bit để đủ 10 bit nạp vào CCPx - Tuỳ độ phân giả mà giá trị value không phảI lúc đạt tới giá trị 1023 BÀI 7: ANALOG (ADC) CỦA PIC TRONG CCS MICROCHIPCONTROLLER - VI ĐIỀU KHIỂN 10:43:00 PM I GIỚI THIỆU Ở chương khảo sát vi điều khiển giao tiếp với vi mạch chuyển đổi tương tự sang số (ADC) vi điều khiển có tích hợp ADC để thực ứng dụng đo lường điều khiển Sau kết thúc chương bạn kết nối vi điều khiển khơng có tích hợp chuyển đổi ADC với vi mạch ADC, sử dụng vi điều khiển có tích hợp ADC, biết trình tự thực q trình chuyển đổi ADC, biết tính tốn độ phân giải, chuyển đổi tính trung bình kết II ADC CỦA VI ĐIỀU KHIỂN PIC 16F887 Vi điều khiển PIC 16F877A có chuyển đổi tín hiệu tương tự sang tín hiệu số ADC 10 bit đa hợp kênh PIC 16F887 có 14 kênh Mạch ADC dùng cho ứng dụng giao tiếp với tín hiệu tương tự nhận từ cảm biến cảm biến nhiệt độ LM35, cảm biến áp suất, cảm biến độ ẩm, cảm biến khoảng cách, … Phần khảo sát chi tiết khối ADC PIC, ghi khối ADC, trình tự thực chuyển đổi, tập lệnh lập trình C cho ADC ứng dụng ADC để đo nhiệt độ KHẢO SÁT ADC CỦA PIC 16F887 ADC PIC16F887 có sơ đồ khối hình 7-1: Chức thành phần: ♣ AN0 đến AN13 (analog) 14 ngõ vào 14 kênh tương tự đưa đến mạch đa hợp ♣ CHS ngõ vào chọn kênh đa hợp tương tự ♣ Tín hiệu kênh tương tự chọn đưa đến chuyển đổi ADC ♣ Điện áp tham chiếu dương Vref+ lập trình nối với nguồn cung cấp dương AVDD điện áp tham chiếu bên nối với ngõ vào Vref+ chân AN3, bit lựa chọn VCFG0 ♣ Điện áp tham chiếu âm Vref- lập trình nối với nguồn cung cấp AV SS điện áp tham chiếu bên nối với ngõ vào Vre- chân AN2, bit lựa chọn VCFG1 ♣ Hai ngõ vào Vref+ Vref- có chức thiết lập độ phân giải cho ADC ♣ Bit ADON có chức cho phép ADC hoạt động tắt ADC không hoạt động để giảm cơng suất tiêu tán, ADON cho phép, tắt ♣ Kết chuyển đổi số nhị phân 10 bit lưu vào cặp ghi 16 bit có tên ADRESH ADRESL, 10 bit kết lưu vào ghi 16 bit nên có dạng lưu canh lề trái canh lề phải tùy thuộc vào bit lựa chọn có tên ADFM ADC có 14 kênh thời điểm chuyển đổi kênh chuyển đổi kênh phụ thuộc vào bit chọn kênh CHS4:CHS0 Hai ngõ vào điện áp tham chiếu dương âm lập trình nối với nguồn VDD VSS nhận điện áp tham chiếu từ bên qua chân RA3 RA2 Khối ADC độc lập với CPU nên hoạt động CPU chế độ ngủ xung cung cấp cho ADC lấy từ dao động RC bên khối ADC KHẢO SÁT CÁC THANH GHI CỦA PIC 16F887 Khối ADC có ghi: Thanh ghi lưu kết byte cao: ADRESH (A/D Result High Register) o DHT11 trả giá trị nhiệt độ độ ẩm dạng byte Trong đó: § Byte 1: giá trị phần ngun độ ẩm (RH%) § Byte 2: giá trị phần thập phân độ ẩm (RH%) § Byte 3: giá trị phần nguyên nhiệt độ (TC) § Byte : giá trị phần thập phân nhiệt độ (TC) § Byte : kiểm tra tổng ð Nếu Byte = (8 bit) (Byte1 +Byte2 +Byte3 + Byte4) giá trị độ ẩm nhiệt độ xác, sai kết đo khơng có nghĩa o Đọc liệu: Sau giao tiếp với DHT11, DHT11 gửi liên tiếp 40 bit MCU, tương ứng chia thành byte kết Nhiệt độ độ ẩm § Bit 0: § Bit 1: Sau tín hiệu đưa 0, ta đợi chân DATA MCU DHT11 kéo lên Nếu chân DATA khoảng 26-28 us 0, tồn 70us Do lập trình ta bắt sườn lên chân DATA, sau delay 50us Nếu giá trị đo ta đọc bit 0, giá trị đo giá trị đo Cứ ta đọc bit LINK PROJECT (CODE + MÔ PHỎNG) SHARE THIS ARTICLE BÀI TẬP MẪU ĐẶC BIỆT CỦA VI ĐIỀU KHIỂN PIC16F877A MICROCHIPCONTROLLER - VI ĐIỀU KHIỂN 1:26:00 PM Bài 1: Ban đầu: 16 led đơn tắt dòng LCD khơng hiển thị (chỉ hiển thị dòng 1) a Khi nhấn nút UP thả: có led đơn sáng hiển thị dấu “>” dòng LCD Khi led đơn 16 sáng nhấn Up khơng có tác dụng b Khi nhấn DW thả: có led đơn tắt xóa dấu “>” dòng LCD Khi 16 led đơn tắt hết nhấn DW khơng có tác dụng Bài 2: Viết chương trình đếm sản phẩm hiển thị LCD theo yêu cầu sau: a nut UP/DOWN thay doi "giatri_dat" hien thi led doan (quet) (2 điểm) + giatri_dat chi thay doi khoang 0->30 (1 diem) b Sử dụng Counter đếm số xung từ bên hiển thị giá trị “dem “hien thi dong LCD (3 điểm) c Ban đầu khong doc xung sau nhan nut START xung bat dau doc xung lưu vào biến “dem” (2 điểm) d So sanh ket qua: (2 điểm) + dem > gtri_dat → LCD hien thi "OVER" tren dong LCD + dem ” dòng LCD tăng dần Khi tăng biến trở đến vị trí max 16 led đơn sáng dòng LCD hiển thị đủ 16 ký tự “>” c Khi chỉnh biến trở theo chiều mũi tên ↓: số led đơn sáng giảm dần số ký tự “>” dòng LCD giảm dần Khi giảm biến trở đến vị trí 16 led đơn tắt dòng LCD rổng * lưu ý: đọc ADC thay đổi 63 đơn vị volume thay đổi mức �[Video code chi tiết]� Bài 5: a Đọc giá trị LM35 hiển thị nhiệt độ dòng LCD LED đoạn (4 điểm) b Đọc giá trị biến trở hiển thị phần trăm dòng LCD (3 điểm) c So sanh ket qua: (3 điểm bao gồm điểm phần cứng) + nhietdo > bientro → quạt quay + nhietdo

Ngày đăng: 16/12/2019, 17:06

TỪ KHÓA LIÊN QUAN

w