Hướng dẫn lập trình hiển thị LED 7 thanh

Nhóm 18 – Giảng đường 205

Nghiêm Minh Sơn Nguyễn Tùng Sơn Phạm Anh Tài Trần Văn Tam Hoàng Sỹ Tân

1 Hoàng Sỹ Tân

ta đặt tên cho các thanh của nó là a. Vậy trong thực tế thì led 7 thanh có 10 chân.e. 1> Cấu trúc LED 7 thanh trong proteus và cách hiển thị: Xem ở hình trên.Ở bài này mình giới thiệu với các bạn cách lập trình để hiển thị LED 7 thanh . 1 chân nguồn cho nó là 8 chân. do đó ta phải gắn vào VCC một điện trở khoảng 330 Ôm để giảm dòng qua LED.5V. sau này sẽ thuận lợi hơn trong việc lập trình để đo nhiệt độ trong bài lập trình dành cho ADC. và các chân kia là 1. nghĩa là khi cấp nguồn cho nó vào chân VCC.f. Giả sử ta muốn hiện số 5.b.f.d là sáng.g . thì nếu tín hiệu vào chân a là 0 thì chân a sáng. nghĩa là các chân này có tín hiệu là 0. Trong thực tế. Bây giờ ta tìm hiểu cách hiển thị lên LED 7 thanh.ta thêm số 1 vào đầu mã cơ số 2): 2 Hoàng Sỹ Tân . ta gọi là chấm h . Mỗi thanh led có dòng qua nó phù hợp là 10-20mA. tín hiệu vào chân a là 1 thì chân a tắt. và cùng nó nữa là 1 chân điều khiển nữa. Đó cũng chính là giá trị trở gắn vào LED đơn trong bt LED đơn. hiệu điện thế khoảng 1. Theo cách hiểu đó.c. led 7 thanh có 1 dấu chấm gần thanh c và d .c. mà với mức 0 và 1 của VĐK tương ứng với 0V và 5V DC.g. nên điều khiển nó ta dùng 7 chân điều khiển tín hiệu. thì cần thanh a. ta lập được bảng sau(do không có chân giờ nên mặc định ta cho chân h=1 để nó không sáng . Đồng thời led 7 thanh thực có 2 chân nguồn.d. chú ý đây là led Anot. tránh bị cháy.

0xb0.0x99.Số 1 2 3 4 5 6 7 8 9 0 a 1 0 0 1 0 0 0 0 0 0 b 0 0 0 0 1 1 0 0 0 0 c 0 1 0 0 0 0 0 0 0 0 d 1 0 0 1 0 0 1 0 0 0 e 1 0 1 1 1 0 1 0 1 0 f 1 1 1 0 0 0 1 0 0 0 g 1 0 0 0 0 0 1 0 0 1 Mã Cơ số 2 11111001 10100100 10110000 10011001 10010010 10000010 11111000 10000000 10010000 11000000 Cơ số 16 0xF9 0xA4 0xB0 0x99 0x92 0x82 0xF8 0x80 0x90 0xC0 Vậy ta có 1 mảng số 16 bit dùng hiển thị LED 7 thanh. ví dụ như sau: 3 Hoàng Sỹ Tân .0xf9.0x82.0xa4.0x92. ta khai báo mảng như sau: Int16 led_7_thanh[]={0xc0.0x90}.0xf8. //Số trong dãy số: 0 1 2 3 4 5 6 7 8 9 2> Mạch LED 7 thanh dùng proteus: Ta có thể vẽ mạch như sau.0x80. các bạn có thể chọn chân nối vào led 7 thanh tùy thích.

0xf9.0x99. để thuận tiện trong việc mô phỏng cho nhanh thì những bài sau mình sẽ không dùng điện trở hạn dòng nữa. đầu VCC của led 7 thanh mình nối trở 220 .0x82.ở đây mình nối PORTB với 7 chân của led 7 thanh.0x90}.0x92.0xf8. //Số trong dãy số: Int i=0.0x80. Void main() { 4 Hoàng Sỹ Tân 0 1 2 3 4 5 6 7 8 9 .0xa4.330 Ôm rồi mới nối với nguồn. nhưng các bạn khi làm mạch thật phải nhớ thêm điện trở vào nhé! 3> Lập trình: Do sử dụng PICC để lập trình cho PIC.j=0.0xb0. nên ta có thể lập trình code như sau: #use delay(clock=20000000) Int16 led_7_thanh[]={0xc0.

xuất file . Delay_ms(500).hex và nạp vào PIC. ta sẽ có mạch đếm từ 0-9 hiển thị led 7 thanh: 5 Hoàng Sỹ Tân . If(i>9) i=0. } } Sử dụng đoạn code trên để lập trình.While(1) // chương trình luôn chạy lặp lại { Set_tris_b(0xFF). // đặt PORTB là output hết Output_b(led_7_thanh[i]). // hiển thị số thứ i trong mảng trên I++.

Do đó chúng ta cần kĩ thuật quét LED. Để điều khiển được chúng thì cần 14 chân của VĐK.4> Kỹ thuật quét LED: Như đã biết. nếu có nhiều hơn LED 7 thanh sẽ không thể đủ chân được. trong khi đó VĐK chỉ có 32 chân điều khiển. sơ đồ nguyên lí như sau: 6 Hoàng Sỹ Tân . nếu chúng ta có 2 con LED 7 thanh. Khi đó.

khi đó Transistor thông. Xuất số 3 ra PORTB. sao cho thời gian hiển thị LED này sáng đến LED kia sáng không quá lâu để mắt có thể nhìn thấy 2 LED sáng gần như 7 Hoàng Sỹ Tân . Lặp quá trình với một số lần nhất định. Giả sử có 3 LED 7 thanh. Giả sử ta cần hiển thị số 34 ra 2 LED này. Xuất số 4 ra PORTB. ta làm tương tự. còn 7 chân kia nối tiếp vào PortB . lợi hơn rất nhiều. khi đó LED sau sáng. Kỹ thuật quét LED như sau: Cho đầu ra của PIN_C0 và PIN_C1 bằng 0 . thì chỉ mất 10 chân trong khi theo cách cũ là tốn 21 chân. có tác dụng đóng ngắt nguồn cho LED 7 thanh. Đặt PIN_C0 lên 1. khi đó Transistor thông. để tắt nguồn của LED. khi đó LED đầu sáng. Tắt LED 2 bằng cách đặt PIN_C1 xuống mức 0. Đặt PIN_C1 lên 1. Như vậy. theo sơ đồ này ta mất 9 chân của VĐK. Tắt LED 1 bằng cách đặt PIN_C0 xuống mức 0. cấp nguồn cho LED hàng chục.- Nối 7 chân của PORTB vào 2 LED 7 thanh Chân điều khiển nguồn của LED 7 thanh là các chân PIN_C0 và PIN_C1 được nối vào cực B của Transistor. chỉ cần nối chân nguồn của led 7 thanh vào tiếp chân Pin_C2. cấp nguồn cho LED hàng đơn vị.

delay_ms(10).0x99. Có nghĩa là mỗi LED phải nháy >24 lần/giây thì mới đạt điều kiện.i++) { Output_low(PIN_C0).0x92.delay_ms(10). Set_tris_c(0xA0).0x80.0xf8. // led 1 sang Output_low(PIN_C0). //led 2 sang Output_low(PIN_C1). Output_low(PIN_C1). output_b(led_7_thanh[4]). Ví dụ code hiển thị số 34 như sau: #use delay(clock=20000000) Int16 led_7_thanh[]={0xc0. //Số trong dãy số: Void main() { Int i=0. Set_tris_b(0xFF).0x82.0x90}. While(1) { For(i=0.0xb0. //tat led 1 Output_high(PIN_C1). //tat 2 led Output_high(PIN_C0).i<10.0xa4.//tat led 2 } } } 0 1 2 3 4 5 6 7 8 9 8 Hoàng Sỹ Tân .đồng thời. Từ việc tính toán thời gian phù hợp ta sẽ có kết quả đúng như ý muốn.0xf9. output_b(led_7_thanh[3]).

có thể kết hợp nút bấm.ở đây mình chưa sử dụng kỹ thuật quét LED: Nếu sử dụng 2 led 7 thanh như trên để quét LED thì có xảy ra việc LED bị nháy. 9 Hoàng Sỹ Tân . khi đó nếu ta thay 2 LED 7 thanh đó bằng 1 linh kiện có 2 LED 7 thanh như sau thì sẽ khắc phục được hiện tượng trên. chúng ta kết hợp thêm ADC như là nhiệt độ để hiển thị ra. Từ đó các bạn có thể làm thêm bt về quét LED. ví dụ như là đếm từ 0 đến 99. mỗi lần bấm nút là số sẽ tăng hoặc giảm 1… Sau khi thành thạo kỹ thuật này. Đây là hình mình làm khi kết hợp nhiệt độ.Qua bài này sẽ giúp bạn hiển thị được 2 số theo ý muốn.

Mọi người cố gắng nhé! 10 Hoàng Sỹ Tân . Sở dĩ mình giới thiệu cách này vì hầu hết các bài hiển thị nhiệt độ trên mạng đều hiển thị lên LCD. cách sử dụng LCD không liên quan tới bài tập lớn nên nếu tìm hiểu LCD sẽ mất thời gian hơn. hoặc là 1 bt làm thêm cho giai đoạn 1.Mình hi vọng các bạn sẽ thực hành sớm bài này để tuần sau chúng ta có thể làm với ADC được nhanh hơn.

Sign up to vote on this title
UsefulNot useful