Đồ án Môn vi xử lí - Khoa công nghệ tự động - Hiển thị ma trận LED khối 8x8x8

Ngày nay khi nhu cầu về thông tin quảng cáo rất lớn, việc áp dụng các phương tiện kĩ thuật mới vào các lĩnh vực trên là rất cần thiết . Khi bạn đến các nơi công cộng,khu giải trí bạn dễ dàng bắt gặp những áp phích quảng cáo điện tử.các hệ thống đèn chiếu LED chạy theo các hướng khác nhau với nhiều hiệu ứng, hình ảnh và màu sắc rất ấn tượng. Từ yêu cầu của môn học kĩ thuật vi xử lý trong đo lường điều khiển và thực tiễn như trên, chúng em quyết định chọn đề tài cho đồ án môn học là: Hiển thị ma trận LED khối 8x8x8. Khi đề tài được mở rộng thì sẽ có khả năng ứng dụng thực tiễn rất lớn. Dưới đây em xin trình bày toàn bộ nội dung đồ án: “Hiển thị ma trận LED khối 8x8x8”.do cô Ths.LÊ THỊ VÂN ANH giảng viên Trường Đại Học Điện Lực hướng dẫn.

doc34 trang | Chia sẻ: lvbuiluyen | Lượt xem: 1839 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Đồ án Môn vi xử lí - Khoa công nghệ tự động - Hiển thị ma trận LED khối 8x8x8, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Contents LỜI NÓI ĐẦU Ngày nay khi nhu cầu về thông tin quảng cáo rất lớn, việc áp dụng các phương tiện kĩ thuật mới vào các lĩnh vực trên là rất cần thiết . Khi bạn đến các nơi công cộng,khu giải trí bạn dễ dàng bắt gặp những áp phích quảng cáo điện tử.các hệ thống đèn chiếu LED chạy theo các hướng khác nhau với nhiều hiệu ứng, hình ảnh và màu sắc rất ấn tượng. Từ yêu cầu của môn học kĩ thuật vi xử lý trong đo lường điều khiển và thực tiễn như trên, chúng em quyết định chọn đề tài cho đồ án môn học là: Hiển thị ma trận LED khối 8x8x8. Khi đề tài được mở rộng thì sẽ có khả năng ứng dụng thực tiễn rất lớn. Dưới đây em xin trình bày toàn bộ nội dung đồ án: “Hiển thị ma trận LED khối 8x8x8”.do cô Ths.LÊ THỊ VÂN ANH giảng viên Trường Đại Học Điện Lực hướng dẫn. Nhờ sự chỉ bảo hướng dẫn tận tình của các thầy cô giáo bộ môn đặc biệt là cô Lê Thị Vân Anh và sự cố gắng tìm hiểu thực tế, tham khảo các tài liệu liên quan mà nhóm em đã hoàn thành đồ án này. Em xin chân thành cảm ơn! Nhóm sinh viên Vũ Văn Cảnh Hoàng Đức Nhân Vũ Thái Long Đỗ Nhật Anh Nguyễn Duy CHƯƠNG 1. TỔNG QUAN VỀ LÝ THUYẾT Dựa trên nguyên tắc như quét màn hình, ta có thể thực hiện việc hiển thị ma trận đèn bằng cách quét theo hàng và quét theo cột. Mỗi Led trên ma trận LED có thể coi như một điểm ảnh. Địa chỉ của mỗi điểm ảnh này được xác định đồng thời bởi mạch giải mã hàng và giải mã cột, điểm ảnh này sẽ được xác định trạng thái nhờ dữ liệu đưa ra từ bộ vi điều khiển AVR ATMEGA32. Như vậy tại mỗi thời điểm chỉ có trạng thái của một điểm ảnh được xác định. Tuy nhiên khi xác định địa chỉ và trạng thái của điểm ảnh tiếp theo thì các điểm ảnh còn lại sẽ chuyển về trạng thái tắt (nếu LED đang sáng thì sẽ tắt dần). Vì thế để hiển thị được toàn bộ hình ảnh của ma trận đèn, ta có thể quét ma trận nhiều lần với tốc độ quét rất lớn, lớn hơn nhiều lần thời gian kip tắt của đèn. Mắt người chỉ nhận biết được tối đa 24 hình /s do đó nếu tốc độ quét rất lớn thì sẽ không nhận ra được sự thay đổi nhỏ của đèn mà sẽ thấy được toàn bộ hình ảnh cần hiển thị. Ma trận đèn LED Giải mã cột Giải mã hàng Sơ đồ khối: Data Khối LED 8x8x8 gồm 8 tầng ma trận LED,mỗi tầng gồm 64 LED được chia thành 8 hàng ngang và 8 hàng dọc. 64 LED trong 1 tầng được nối chung chân âm catot và 8 tầng được nối chung anot tạo thành 64 cột. Trạng thái của một LED sẽ được quyết định bởi tín hiệu điện áp đi vào đồng thời cả 2 chân. Ví dụ để LED sáng thì điện áp 5V phải đưa vào chân dương và chân âm phải được nối đất, LED sẽ tắt khi không có điện áp đưa vào chân dương. CHƯƠNG 2. THIẾT KẾ PHẦN CỨNG 2.1 THIẾT KẾ MẠCH LỰC Đồ án gồm hai mạch lực : - Mạch thứ nhất tạo điện áp +5V cấp nguồn cho VĐK AT Mega32 - Mạch thứ hai tạo điện áp +5V cấp nguồn cho 8 IC 74HC59; IC ULN2803 và 514 LED Sơ đồ nguyên lý mạch lực : TT Tên thiết bị Số lượng Các thông số kĩ thuật 1 Biến áp 1 9V - 12V ; 2A 2 Cầu điôt 2 5A 3 IC 7805 2 Tạo điện áp +5V 4 Tụ hóa 2 1000F 5 Tụ hóa 2 470F 6 Tụ gốm 104 2 0.1F 7 Điện trở 2 1k 8 LED 2 3-5V ; 10mA 2.2 THIẾT KẾ MẠCH ĐIỀU KHIỂN 2.2.1 Vi điều khiển ATMEGA32. Atmega32 là vi điều khiển thuộc họ AVR của hãng Atmel,có 40 chân trong đó có 32 chân I/O,có 4 kênh điều xung PWM,sử dụng thạch anh ngoài 12MHz. Nhân AVR kết hợp tập lệnh đầy đủ với 32 thanh ghi đa năng. Tất cả các thanh ghi liên kết trực tiếp với khối xử lý số học và logic (ALU) cho phép 2 thanh ghi độc lập được truy cập trong một lệnh đơn trong 1 chu kỳ đồng hồ. Kết quả là tốc độ nhanh gấp 10 lần các bộ vi điều khiển CISC thường. Dưới đây là hình vẽ sơ đồ chân của VĐK At mega32: Hình 3.1 :Sơ đồ chân Atmega32 At mega32 gồm có 4 port :port A,port B,port C và port D. Port A gồm 8 chân từ PA0 đến PA7:là cổng vào tương tự cho chuyển đổi tương tự sang số.Nó cũng là cổng vào/ra hai hướng 8 bít trong trường hợp không sử sụng làm cổng chuyển đổi tương tự,có điện trở nối lên nguồn dương bên trong.Port A cung cấp đường địa chỉ dữ liệu vao/ra theo kiểu hợp kênh khi dùng bộ nhớ bên ngoài. Port B gồm 8 chân từ PB0 đến PB7:là cổng vào/ra hai hướng 8 bít,có điện trở nối lên nguồn dương bên trong.Port B cung cấp các chức năng ứng với các tính năng đặc biệt của Atmega32. Port C gồm các chân từ PC0 đến PC7:là cổng vào/ra hai hướng 8 bit,có điện trở nối lên nguồn dương bên trong,Port C cung cấp các địa chỉ lối ra khi sử dụng bộ nhớ bên ngoài và đồng thời cung cấp ứng với các tính năng đặc biệt của Atmega32. Port D gồm các chân từ PD0 đến PD7:là cổng vào/ra hai hướng 8 bít,có điện trở nối lên nguồn dương bên trong. Port D cung cấp các chức năng ứng với các tính năng đặc biệt của Atmega32. Chân nguồn Vcc (chân số 10 và chân số 30):điện áp nguồn nuôi của Atmega32 từ 4.5v đến 5.5v. Chân Reset (chân số 9):lối vào đặt lại. Chân GND (chân số 11 và chân 31):chân nối mas. Chân XTAL1,XTAL2 là hai chân nối thạch anh ngoài (chân số 12 và chân số 13).Atmega32 sử dụng thạch anh ngoài là 12MHz. Chân ICP(chân số 20):là chân vào cho chức năng bắt tín hiệu cho bộ định thời/đếm 1. Chân OC1B(chân số 18):là chân ra cho chức năng so sánh lối ra bộ định thời/đếm 1. Chân INT1(chân số 17):chân ngõ vào ngắt. ATmega32 có các đặc tính sau: 32Kbytes bộ nhớ ISP Flash với Read-While-Write capacities. 2Kbytes RAM. 1024 bytes EEPROM. 32 đường I/O đa năng. 32 thanh ghi đa năng. JTAG interface. On-chip Debug and Program. 3 bộ định thời phức hợp với chế độ so sánh. Ngắt ngoài và trong. Bộ truyền nhận nối tiếp USART lập trình được. Bộ giao tiếp nối tiếp định hướng 2 dây. 8 kênh, 10bit ADC với ngưỡng vào lựa chọn khác nhau độ lợi lập trình được. Bộ WatchDog Timer khả trình với dao động nội. Port SPI nối tiếp. Hình 3.2: Sơ đồ cấu trúc bên trong của Atmega32. ATmega32 có các chế độ tiết kiệm năng lượng như sau: Chế độ nghỉ (Idle) CPU trong khi cho phép bộ truyền tin nối tiếp đồng bộ USART, giao tiếp 2 dây, chuyển đổi A/D, SRAM, bộ đếm bộ định thời, cổng SPI và hệ thống các ngắt vẫn hoạt động. Chế độ Power-down lưu giữ nội dung của các thanh ghi nhưng làm đông lạnh bộ tạo dao động, thoát khỏi các chức năng của chip cho đến khi có ngắt ngoài hoặc là reset phần cứng. Chế độ Power-save đồng hồ đồng bộ tiếp tục chạy cho phép chương trình sử dụng giữ được đồng bộ thời gian nhưng các thiết bị còn lại là ngủ. Chế độ ADC Noise Reduction dừng CPU và tất cả các thiết bị còn lại ngoại trừ đồng hồ đồng bộ và ADC, tối thiểu hoá switching noise trong khi ADC đang hoạt động. Chế độ standby, bộ tạo dao động (thuỷ tinh thể/bộ cộng hưởng) chạy trong khi các thiết bị còn lại ngủ. Các điều này cho phép bộ vi điều khiển khởi động rất nhanh trong chế độ tiêu thụ công suất thấp. Thiết bị được sản xuất sử dụng công nghệ bộ nhớ cố định mật độ cao của Atmel. Bộ nhớ On-chip ISP Flash cho phép lập trình lại vào hệ thống qua giao diện SPI bởi bộ lập trình bộ nhớ cố định truyền thống hoặc bởi chương trình On-chip Boot chạy trên nhân AVR. Chương trình boot có thể sử dụng bất cứ giao điện nào để download chương trình ứng dụng trong bộ nhớ Flash ứng dụng. Phần mềm trong vùng Boot Flash sẽ tiếp tục chạy trong khi vùng Application Flash được cập nhật, cung cấp thao tác Read-While-Write thực sự. Bằng việc kết hợp 1 bộ 8-bit RISC CPU với In-System Self-Programmable Flash trong chỉ nguyên vẹn 1 chip ATmega32 là một bộ vi điều khiển mạnh có thể cung cấp giải pháp có tính linh động cao, giá thành rẻ cho nhiều ứng dụng điều khiển nhúng. 2.2.2 ULN2803 ULN2803 là IC đệm đảo có 16 chân trong đó có 8 ngõ vào và 8 ngõ ra, dưới đây là hình dạng và cấu tạo bên trong của 2803: Bộ đệm đảo dùng IC ULN2803 nhằm đảo bít nếu ngõ vào ở mức cao qua 2803 ra sẽ là mức thấp. ULN2803 chịu đựng mức điện áp từ 6V-15V. 2.2.3 IC 74HC595 Nguyên tắt hoạt động: khi cho 1 bit vào SERIAL DATA INPUT và tác động vào chân SHIFT CLOCK, bit dữ liệu (1) sẽ được đặt sẳn ở ngỏ ra QA của 74595, tiếp tục đưa vào bit (2) và tác động vào SHIFT CLOCK thì bit dữ liệu (1) sẽ được đặt sẳn ở ngỏ ra QB, bit dữ liệu (2) sẽ được đặt sẳn ở ngỏ ra QA,...tương tự đến bit cuối cùng. Chú y dữ liệu chỉ được chuẩn bị sẳn ở các ngỏ ra và chỉ được xuất ra khi ta tác động vào chân LATCH CLOCK. Có thể xuất dữ liệu bất cứ lúc nào không phải cần chuẩn bị đến bit cuối cùng. 2.2.4 Mạch nguyên lý TT Tên thiết bị Số lượng 1 ATMega32 1 2 IC ULN2803 1 3 IC 74HC595 8 4 Header 8 9 5 Header 5x2 1 6 Bottom 3 7 Điện trở 1 8 Tụ hóa 10 F 1 2.3 THIẾT KẾ MẠCH IN 2.3.1. Bố trí linh kiện 2.3.2 Mạch in CHƯƠNG 3. THIẾT KẾ PHẦN MỀM Sử dụng trình biên dich Codevision để soạn thảo chương trình #include #include #define DATA PORTC.0 #define chot PORTC.1 #define xung PORTC.2 #define mat PORTA #define L1 PORTA.0 #define L2 PORTA.1 #define L3 PORTA.2 #define L4 PORTA.3 #define L5 PORTA.4 #define L6 PORTA.5 #define L7 PORTA.6 #define L8 PORTA.7 unsigned char temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8,; unsigned int i,j;//k,c; void hienthi(unsigned char x) { unsigned char i,temp; for(i=0;i<8;i++) { temp=x; temp=temp&0x80;//lay ra bit dau tien (bit 7) if(temp==0x80)//so sanh bit DATA=1; //bang 1 thi xuat vao chip =1 else DATA=0; //nguoc lai bang 0 x*=2; //dich bit lay bit trong so thap xung=0; //tao xung tren chan 11 xung=1; //1 xung dua vào 1 bít } } void xuat() { hienthi(temp1); hienthi(temp2); hienthi(temp3); hienthi(temp4); hienthi(temp5); hienthi(temp6); hienthi(temp7); hienthi(temp8); chot=0; //xuat du lieu ra output chot=1; } void danglen(unsigned char ms,unsigned int m) { for(i=0;i<m;i++) { temp1=0xff;temp2=0xff;temp3=0xff;temp4=0xff;temp5=0xff;temp6=0xff;temp7=0xff;temp8=0xff;xuat(); L1=1;delay_ms(ms);L1=0; L2=1;delay_ms(ms);L2=0; L3=1;delay_ms(ms);L3=0; L4=1;delay_ms(ms);L4=0; L5=1;delay_ms(ms);L5=0; L6=1;delay_ms(ms);L6=0; L7=1;delay_ms(ms);L7=0; L8=1;delay_ms(ms);L8=0; L7=1;delay_ms(ms);L7=0; L6=1;delay_ms(ms);L6=0; L5=1;delay_ms(ms);L5=0; L4=1;delay_ms(ms);L4=0; L3=1;delay_ms(ms);L3=0; L2=1;delay_ms(ms);L2=0; } } //////////////////////////////////////////////////// void pittong2(unsigned char ms,unsigned int m) { for(i=0;i<m;i++) { temp1=0x01;temp2=0x01;temp3=0x01;temp4=0x01,temp5=0x01;temp6=0x01;temp7=0x01;temp8=0x01;xuat();mat=0xff;delay_ms(ms); temp1=0x02;temp2=0x02;temp3=0x02;temp4=0x02;temp5=0x02;temp6=0x02;temp7=0x02;temp8=0x02;xuat();delay_ms(ms); temp1=0x04;temp2=0x04;temp3=0x04;temp4=0x04;temp5=0x04;temp6=0x04;temp7=0x04;temp8=0x04;xuat();delay_ms(ms); temp1=0x08;temp2=0x08;temp3=0x08;temp4=0x08;temp5=0x08;temp6=0x08;temp7=0x08;temp8=0x08;xuat();delay_ms(ms); temp1=0x10;temp2=0x10;temp3=0x10;temp4=0x10;temp5=0x10;temp6=0x10;temp7=0x10;temp8=0x10;xuat();delay_ms(ms); temp1=0x20;temp2=0x20;temp3=0x20;temp4=0x20;temp5=0x20;temp6=0x20;temp7=0x20;temp8=0x20;xuat();delay_ms(ms); temp1=0x40;temp2=0x40;temp3=0x40;temp4=0x40;temp5=0x40;temp6=0x40;temp7=0x40;temp8=0x40;xuat();delay_ms(ms); temp1=0x80;temp2=0x80;temp3=0x80;temp4=0x80;temp5=0x80;temp6=0x80;temp7=0x80;temp8=0x80;xuat();delay_ms(ms); temp1=0x40;temp2=0x40;temp3=0x40;temp4=0x40;temp5=0x40;temp6=0x40;temp7=0x40;temp8=0x40;xuat();delay_ms(ms); temp1=0x20;temp2=0x20;temp3=0x20;temp4=0x20;temp5=0x20;temp6=0x20;temp7=0x20;temp8=0x20;xuat();delay_ms(ms); temp1=0x10;temp2=0x10;temp3=0x10;temp4=0x10;temp5=0x10;temp6=0x10;temp7=0x10;temp8=0x10;xuat();delay_ms(ms); temp1=0x08;temp2=0x08;temp3=0x08;temp4=0x08;temp5=0x08;temp6=0x08;temp7=0x08;temp8=0x08;xuat();delay_ms(ms); temp1=0x04;temp2=0x04;temp3=0x04;temp4=0x04;temp5=0x04;temp6=0x04;temp7=0x04;temp8=0x04;xuat();delay_ms(ms); temp1=0x02;temp2=0x02;temp3=0x02;temp4=0x02;temp5=0x02;temp6=0x02;temp7=0x02;temp8=0x02;xuat();delay_ms(ms);mat=0x00; }} //////////////////////////////////////////////////// void pittong(unsigned char ms,unsigned int m) { for(i=0;i<m;i++) { temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0xff;xuat();mat=0xff;delay_ms(ms); temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0xff;temp8=0x00;xuat();delay_ms(ms); temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0xff;temp7=0x00;temp8=0x00;xuat();delay_ms(ms); temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0xff;temp6=0x00;temp7=0x00;temp8=0x00;xuat();delay_ms(ms); temp1=0x00;temp2=0x00;temp3=0x00;temp4=0xff,temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x00;xuat();delay_ms(ms); temp1=0x00;temp2=0x00;temp3=0xff;temp4=0x00,temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x00;xuat();delay_ms(ms); temp1=0x00;temp2=0xff;temp3=0x00;temp4=0x00,temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x00;xuat();delay_ms(ms); temp1=0xff;temp2=0x00;temp3=0x00;temp4=0x00,temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x00;xuat();delay_ms(ms); temp1=0x00;temp2=0xff;temp3=0x00;temp4=0x00,temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x00;xuat();delay_ms(ms); temp1=0x00;temp2=0x00;temp3=0xff;temp4=0x00,temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x00;xuat();delay_ms(ms); temp1=0x00;temp2=0x00;temp3=0x00;temp4=0xff,temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x00;xuat();delay_ms(ms); temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0xff;temp6=0x00;temp7=0x00;temp8=0x00;xuat();delay_ms(ms); temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0xff;temp7=0x00;temp8=0x00;xuat();delay_ms(ms); temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0xff;temp8=0x00;xuat();delay_ms(ms);mat=0x00; } } void khung1(unsigned char ms,unsigned int m) { PORTA=0; for(i=0;i<m;i++) { for(j=0;j<(ms+4);j++) { temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x01;xuat();L1=1;delay_ms(1);L1=0; } for(j=0;j<(ms+3);j++) { temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x03;temp8=0x03;xuat();L1=1;delay_ms(1);L1=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x03;temp8=0x03;xuat();L2=1;delay_ms(1);L2=0; } for(j=0;j<(ms+2);j++) { temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x07;temp7=0x05;temp8=0x07;xuat();L1=1;delay_ms(1);L1=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x05;temp7=0x00;temp8=0x05;xuat();L2=1;delay_ms(1);L2=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x07;temp7=0x05;temp8=0x07;xuat();L3=1;delay_ms(1);L3=0; } for(j=0;j<(ms+2);j++) { temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x0f;temp6=0x09;temp7=0x09;temp8=0x0f;xuat();L1=1;delay_ms(1);L1=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x09;temp6=0x00;temp7=0x00;temp8=0x09;xuat();L2=1;delay_ms(1);L2=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x09;temp6=0x00;temp7=0x00;temp8=0x09;xuat();L3=1;delay_ms(1);L3=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x0f;temp6=0x09;temp7=0x09;temp8=0x0f;xuat();L4=1;delay_ms(1);L4=0; } for(j=0;j<(ms+1);j++) { temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x1f;temp5=0x11;temp6=0x11;temp7=0x11;temp8=0x1f;xuat();L1=1;delay_ms(1);L1=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x11;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x11;xuat();L2=1;delay_ms(1);L2=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x11;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x11;xuat();L3=1;delay_ms(1);L3=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x11;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x11;xuat();L4=1;delay_ms(1);L4=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x1f;temp5=0x11;temp6=0x11;temp7=0x11;temp8=0x1f;xuat();L5=1;delay_ms(1);L5=0; } for(j=0;j<(ms+1);j++) { temp1=0x00;temp2=0x00;temp3=0x3f;temp4=0x21;temp5=0x21;temp6=0x21;temp7=0x21;temp8=0x3f;xuat();L1=1;delay_ms(1);L1=0; temp1=0x00;temp2=0x00;temp3=0x21;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x21;xuat();L2=1;delay_ms(1);L2=0; temp1=0x00;temp2=0x00;temp3=0x21;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x21;xuat();L3=1;delay_ms(1);L3=0; temp1=0x00;temp2=0x00;temp3=0x21;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x21;xuat();L4=1;delay_ms(1);L4=0; temp1=0x00;temp2=0x00;temp3=0x21;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x21;xuat();L5=1;delay_ms(1);L5=0; temp1=0x00;temp2=0x00;temp3=0x3f;temp4=0x21;temp5=0x21;temp6=0x21;temp7=0x21;temp8=0x3f;xuat();L6=1;delay_ms(1);L6=0; } for(j=0;j<(ms);j++) { temp1=0x00;temp2=0x7f;temp3=0x41;temp4=0x41;temp5=0x41;temp6=0x41;temp7=0x41;temp8=0x7f;xuat();L1=1;delay_ms(1);L1=0; temp1=0x00;temp2=0x41;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x41;xuat();L2=1;delay_ms(8);L2=0; temp1=0x00;temp2=0x41;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x41;xuat();L3=1;delay_ms(1);L3=0; temp1=0x00;temp2=0x41;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x41;xuat();L4=1;delay_ms(1);L4=0; temp1=0x00;temp2=0x41;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x41;xuat();L5=1;delay_ms(1);L5=0; temp1=0x00;temp2=0x41;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x41;xuat();L6=1;delay_ms(1);L6=0; temp1=0x00;temp2=0x7f;temp3=0x41;temp4=0x41;temp5=0x41;temp6=0x41;temp7=0x41;temp8=0x7f;xuat();L7=1;delay_ms(1);L7=0; } for(j=0;j<(ms);j++) { temp1=0xff;temp2=0x81;temp3=0x81;temp4=0x81;temp5=0x81;temp6=0x81;temp7=0x81;temp8=0xff;xuat();L1=1;delay_ms(1);L1=0; temp1=0x81;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x81;xuat();L2=1;delay_ms(1);L2=0; temp1=0x81;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x81;xuat();L3=1;delay_ms(1);L3=0; temp1=0x81;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x81;xuat();L4=1;delay_ms(1);L4=0; temp1=0x81;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x81;xuat();L5=1;delay_ms(1);L5=0; temp1=0x81;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x81;xuat();L6=1;delay_ms(1);L6=0; temp1=0x81;temp2=0x00;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x81;xuat();L7=1;delay_ms(1);L7=0; temp1=0xff;temp2=0x81;temp3=0x81;temp4=0x81;temp5=0x81;temp6=0x81;temp7=0x81;temp8=0xff;xuat();L8=1;delay_ms(1);L8=0; } for(j=0;j<(ms);j++) { temp1=0x00;temp2=0xfe;temp3=0x82;temp4=0x82;temp5=0x82;temp6=0x82;temp7=0x82;temp8=0xfe;xuat();L1=1;delay_ms(1);L1=0; temp1=0x00;temp2=0x82;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x82;xuat();L2=1;delay_ms(1);L2=0; temp1=0x00;temp2=0x82;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x82;xuat();L3=1;delay_ms(1);L3=0; temp1=0x00;temp2=0x82;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x82;xuat();L4=1;delay_ms(1);L4=0; temp1=0x00;temp2=0x82;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x82;xuat();L5=1;delay_ms(1);L5=0; temp1=0x00;temp2=0x82;temp3=0x00;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x82;xuat();L6=1;delay_ms(1);L6=0; temp1=0x00;temp2=0xfe;temp3=0x82;temp4=0x82;temp5=0x82;temp6=0x82;temp7=0x82;temp8=0xfe;xuat();L7=1;delay_ms(1);L7=0; } for(j=0;j<(ms+1);j++) { temp1=0x00;temp2=0x00;temp3=0xfc;temp4=0x84;temp5=0x84;temp6=0x84;temp7=0x84;temp8=0xfc;xuat();L1=1;delay_ms(1);L1=0; temp1=0x00;temp2=0x00;temp3=0x84;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x84;xuat();L2=1;delay_ms(1);L2=0; temp1=0x00;temp2=0x00;temp3=0x84;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x84;xuat();L3=1;delay_ms(1);L3=0; temp1=0x00;temp2=0x00;temp3=0x84;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x84;xuat();L4=1;delay_ms(1);L4=0; temp1=0x00;temp2=0x00;temp3=0x84;temp4=0x00;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x84;xuat();L5=1;delay_ms(1);L5=0; temp1=0x00;temp2=0x00;temp3=0xfc;temp4=0x84;temp5=0x84;temp6=0x84;temp7=0x84;temp8=0xfc;xuat();L6=1;delay_ms(1);L6=0; } for(j=0;j<(ms+1);j++) { temp1=0x00;temp2=0x00;temp3=0x00;temp4=0xf8;temp5=0x88;temp6=0x88;temp7=0x88;temp8=0xf8;xuat();L1=1;delay_ms(1);L1=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x88;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x88;xuat();L2=1;delay_ms(1);L2=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x88;temp5=0x00;temp6=0x00;temp7=0x00;temp8=0x88;xuat();L3=1;delay_ms(1);L3=0; temp1=0x00;temp2=0x00;temp3=0x00;temp4=0x8