THIẾT KẾ ĐỒNG HỒ ĐIỆN TỬ HIỂN THỊ BẰNG MÀN HÌNH TINH THỂ LỎNG (LCD)

25 749 3
THIẾT KẾ ĐỒNG HỒ ĐIỆN TỬ HIỂN THỊ BẰNG MÀN HÌNH TINH THỂ LỎNG (LCD)

Đ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

GIỚI THIỆU TỔNG QUAN VỀ HỌ 8051 Vi điều khiển 8051 – Mô tả phần cứng Vi điều khiển 8051 là một trong những họ vi điều khiển 8bit thông dụng nhất trên thế giới. Vi điều khiển này được chế tạo lần đầu tiên bởi hãng Intel, sau đó được các hãng khác chế tạo dưới dạng các dẫn xuất khác nhau. Các dẫn xuất này đều có chung một kiến trúc giống với vi điều khiển 8051 kinh điển. Thêm vào đo, tùy theo từng loại mà các chip dẫn xuất được tích hợp thêm các ngoại vi khác nhau (như ADC, SPI, EEPROM, capturecompare channels…), tính năng cũng được nâng cao để phù hợp với các ứng dụng ngày càng phức tạp. Trước hết xin giới thiệu một số tính năng của họ vi điều khiển 8051 (lưu ý là những tính năng này là của vi điều khiển 8051 kinh điển): CPU 8bit được thiết kế tối ưu cho các ứng dụng điều khiển. Co cac khả năng xử lý bit logic. Không gian bộ nhớ chương trình 64Kbyte. Không gian bộ nhớ dữ liệu 64 Kbyte. Tích hợp 4Kbyte bộ nhớ chương trình trên chip. Tích hợp 128byte bộ nhớ RAM trên chip.

BỘ GIÁO DỤC ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI ĐỒ ÁN MÔN HỌC THIẾT KẾ ĐỒNG HỒ ĐIỆN TỬ HIỂN THỊ BẰNG MÀN HÌNH TINH THỂ LỎNG (LCD) GIÁO VIÊN HƯỚNG DẪN NGUYỄN ANH DŨNG SINH VIÊN THỰC HIỆN NGUYỄN MINH ANH HÀ NỘI-2014 A.GIỚI THIỆU TỔNG QUAN VỀ HỌ 8051 Vi điều khiển 8051 – Mô tả phần cứng Vi điều khiển 8051 họ vi điều khiển 8bit thông dụng giới Vi điều khiển chế tạo lần hãng Intel, sau hãng khác chế tạo dạng dẫn xuất khác Các dẫn xuất có chung kiến trúc giống với vi điều khiển 8051 kinh điển Thêm vào đo, tùy theo loại mà chip dẫn xuất tích hợp thêm ngoại vi khác (như ADC, SPI, EEPROM, capture/compare channels…), tính nâng cao để phù hợp với ứng dụng ngày phức tạp Trước hết xin giới thiệu số tính họ vi điều khiển 8051 (lưu ý tính vi điều khiển 8051 kinh điển): - CPU 8bit thiết kế tối ưu cho ứng dụng điều khiển - Co cac khả xử lý bit logic - Không gian nhớ chương trình 64Kbyte - Khơng gian nhớ liệu 64 Kbyte - Tích hợp 4Kbyte nhớ chương trình chip - Tích hợp 128byte nhớ RAM chip - Có 32 đường vàoo/ra chiều cố thể định địa đến bit - Tích hợp 02 timer 16bit - Tích hợp UART song song - Cấu trúc ngắt với 06 nguồn/05 vector 02 mức ưu tiên khác - Tích hợp mạch dao động chip Vi điều khiển giới thiệu sản xuất theo công nghệ CMOS Một số loại vi điều khiển thơng dụng thuộc họ 8051 kể như: AT89C2051( 20 chân), AT89C4051( 20 chân), AT89C51( 40 chân), AT89C52( 40 chân), AT89S51( 40 chân), AT89S52( 40 chân), AT89S53( 40 chân) Sau sơ đồ khối tổng quan 8051 I-Cấu trúc phần cứng họ 8051( AT 89S52) Sơ đồ chân AT 89S52 Bộ vi điều khiển AT89S52 gồm khối chức sau đây: CPU( Central Processing Unit) bao gồm: - Thanh ghi tích luỹ A - Thanh ghi tích luỹ phụ B, dùng cho phép nhân phép chia - Đơn vị logic học( ALU: Arithmetic Logical Unit) - Từ trạng thái chương trình( PSW: Progam Status Word) - Bốn băng ghi - Con trỏ ngăn xếp Bộ nhớ chương trình( Bộ nhớ ROM) gồm 8Kb Flash Bộ nhớ liệu( Bô nhớ RAM) gồm 256 bytes Bộ UART( Universal Ansynchronous Receiver and Tranmitter) làm chức truyền nhận nối tiếp, nhờ khối này, AT89S52 giao tiếp với máy tính qua cổng COM Timer /Counter 16 bít thực chức định thời đếm kiện WDM( Watch Dog Timer) dùng để phục hồi lại hoạt động CPU bị treo nguyên nhân WDM AT89S52 gồm Timer 14 bít, Timer bít, ghi WDTPRG( WDT programable) điều khiển Timer bit ghi chớc WDTRST( WDM register) Bình thường WDT khơng hoạt động( bị cấm), phép WDT, giá trị 1EH E1H cần phải ghi liên tiếp vào ghi WDTRST Timer 14 bit WDT đếm tăng dần sau chu kỳ đồng hồ giá trị 16383 xảy tràn Khi xảy tràn, chân RTS đặt mức cao thời gian 96.Tosc (Tossc=1/Fosc) AT89S52 reset Khi WDT hoạt động, ngoại trừ reset phần cứng reset WDT tràn khơng có cách cấm WDT, sử dụng WDT đoạn mã chương trình phải đặt khe thời gian từ lần WDT khởi tạo lại Sơ đồ khối vi điều khiển 89S52 II- Sơ đồ chân chức Port 0(P0.0-P0.7 hay từ chân 32 đến chân 39): Gồm chân, chức xuất nhập ra, Port Bus đa hợp liệu địa chỉ( AD0-AD7), chức sử dụng AT89S52 giao tiếp với thiết bị ngồi có kiến trúc Bus Port 1( P1.0-P1,7 hay từ chân đến chân 8) : Có chức xuất nhập theo bit byte Ngồi ra, chân P1.5, P1.6, P1.7 dùng để nạp ROM theo chuẩn ISP, chân P1.0 P1.1 dùng cho Timer Port 2( P2.0- P2.7 hay từ chân 21 đến chân 28): Là port có cơng dụng kép: đường xuất nhập byte cao bus địa thiết kế dùng nhớ mở rộng Port 3( P3.0- P3.7 hay từ chân 10 đến chân 17): Mỗi chân port ngồi chức xuất nhập cịn có chức riêng: Bit Tên Chức P3.0 RXD Dữ liệu nhận cho port nối tiếp P3.1 TXD Dữ liệu phát cho port nối tiếp P3.2 INT0 Ngắt bên P3.3 INT1 Ngắt bên P3.4 T0 Ngõ vào Timer/Counter P3.5 T1 Ngõ vào Timer/Counter P3.6 WR Xung ghi nhớ liệu bên P3.7 RD Xung đọc nhớ liệu bên RST( Reset- chân 9): Mức tích cực chân mức 1, để reset ta phải đưa mức 1(5V) đến chân với thời gian tối thiểu chu kỳ máy( tương đương 2uS thạch anh 12MHz Trạng thái ghi reset, reset trạng thái ghi không thay đổi Cỏc ngừ vào dao động Xtal1, Xtal2: Bộ tạo dao động tích hợp bờn 89S52 Khi sử dụng 89S52, người ta cần nối thêm tụ thạch anh tụ Tần số tụ thạch anh thường 12 Mhz-24Mhz EA( External Access): EA thường mắc lên mức cao(+5V) mức thấp( GND) Nếu mức cao, vi điều khiển thi hành chương trình từ ROM nội Nếu mức thấp, chương trinh thi hành từ nhớ mở rộng ALE( Address Latch Enable): 10 ALE tín hiệu để chốt địa vào ghi bên nửa đầu chu kỳ nhớ Sau đường port dùng để xuất nhập liệu nửa chu kỳ sau nhớ PSEN( Program Store Enable): PSEN điều khiển phép nhớ chương trình mở rộng trường nối đến chân /OE ( Output Enable) EPROM phép đọc bytes mã lệnh PSEN mức thấp thừi gian đọc lệnh Các mã nhị phân chương trình đọc từ EPROM qua Bus chốt vào ghi lệnh vi điều khiển để giải mã lệnh Khi thi hành chương trình ROM nội, PSEN mức thụ động( mức cao) 10 Vcc, GND: AT89S52 dùng nguồn chiều có dải điện áp từ 4V-5.5V cấp qua chân 40(+) chân 20(-) 11 B : NỘI DUNG I.CODE #include #include #define change P3_3 #define ok P3_4 #define up P3_5 #define down P3_6 unsigned char mode = 0; unsigned char hrs,min,sec,date,month,year; unsigned int i; void setting(void); void display(void); void ngat_hien_thi_thoi_gian_timer_0 (void); void setting(void) { P0=0xFF; hrs=12; min=0; sec=0; date = 27; month = 2; year = 9; TMOD= 0x21; TH1 = 55; IE = 0x8A; TR1 = 1; TR0 = 1; } 12 void display() { lenh(ve_dau_dong_thu_nhat); lenh(tat_con_tro); lcd_gotoxy(2,4); write_num(hrs); write(":"); write_num(min); write(":"); write_num(sec); lcd_gotoxy(1,3); write_num(date); write("/"); write_num(month); write("/20"); write_num(year); } void main(void) { setting(); khoi_tao_lcd(); lenh(xoa_man_hinh); display(); while(1) { if(!change) 13 { while(!change); TR0 = 0; TR1=0; mode++; while(mode != || mode >= 7) { if(!change) // { while(!change); mode++; } if(mode > 7)mode=0; switch(mode) { case 1: if (up==0) { hrs++; if(hrs==24) hrs=0; while(!up); display(); } else if (down==0) { hrs ; if(hrs == 0)hrs=23; 14 while(!down); display(); } display(); if(ok==0 || mode==0) goto escape; break; case 2://change minutes if (up==0) { min++; if(min==60)min=0; while(!up); display(); } else if (down==0) { if(min==0)min=60; ; while(!down); display(); } if(ok==0 || mode==0) goto escape; break; case 3: //change seconds if (up==0 || down==0) { 15 sec=0; } display(); if(ok==0 || mode==0) goto escape; break; case 4: // chinh if (!up) { date ++; if (month == && date > 28 ) date = 1; if ((month == || month == || month == || month == || month == || month == 10 || month == 12) && date > 31) date = 1; if ((month == || month == || month == || month == 11 ) && date > 30) date = 1; while(!up); display(); } else if (!down) { date ; if (date == && month == ) date = 28; if ((month == || month == || month == || month == || month == || month == 10 || month == 12) && date == 0) date = 31; if ((month == || month == || month == || 16 month == 11 ) && date == 0) date = 30; while(!down); display(); } if(ok == || mode == 0) goto escape; break; case 5://chinh thang if (up==0) { month ++; if(month > 12) month =1; while(!up); display(); } else if (down==0) { ; if(month == 0) month = 12; while(!down); display(); } if(ok==0 || mode == 0) goto escape; break; 17 case 6://chinh nam if (up==0) { year++; if(year == 100 ) year = 1; while(!up); display(); } else if (down==0) { year ; if(year == 0)year = 99; while(!down); display(); } if(ok==0 || mode == 0) goto escape; break; if(mode == 0) { display(); break; } } escape: TR1=1; 18 TR0 = 1; mode = 0; } } } void ngat_timer_1(void)interrupt { i++; if(i==5000) { i=0; sec++; if(sec==60) { sec=0; min++; if(min==60) { min=0; hrs++; if(hrs==24) { hrs=0; date ++; if (month == && date >= 29) { 19 date = 1; month ++; } if ((month == || month == || month == || month == || month == || month == 10 || month == 12) && date >31) { date = 1; month ++; if(month > 12) { month = 1; year ++; if(year == 100) year = 0; } } if ((month == || month == || month == || month == || month == 11 ) && date >30) { date = 1; month ++; } } } } } } 20 void ngat_hien_thi_thoi_gian_timer_0 (void) interrupt { TF0 = 0; display(); } #define xoa_man_hinh 0x01 #define tat_con_tro 0x0c #define ve_dau_dong_thu_nhat 0x80 #define lcd_rs P0_5 #define lcd_rw P0_6 #define lcd_en P0_7 #define port_data P2 char x; void delay(unsigned int ms); void busy_flag(void); void lenh(unsigned char LCDcmd); void write_data(unsigned LCD_data); void write(char *s); void khoi_tao_LCD(void); void write_num(unsigned int number); void lcd_gotoxy(unsigned char row,unsigned char column); void delay(unsigned int ms) { unsigned int i; for(i=0;i

Ngày đăng: 16/08/2014, 12:50

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan