Đồ án tốt nghiệp: Đo điện áp xoay chiều hiển thị lên LCD

docx
Số trang Đồ án tốt nghiệp: Đo điện áp xoay chiều hiển thị lên LCD 24 Cỡ tệp Đồ án tốt nghiệp: Đo điện áp xoay chiều hiển thị lên LCD 490 KB Lượt tải Đồ án tốt nghiệp: Đo điện áp xoay chiều hiển thị lên LCD 8 Lượt đọc Đồ án tốt nghiệp: Đo điện áp xoay chiều hiển thị lên LCD 97
Đánh giá Đồ án tốt nghiệp: Đo điện áp xoay chiều hiển thị lên LCD
4.8 ( 10 lượt)
Nhấn vào bên dưới để tải tài liệu
Để tải xuống xem đầy đủ hãy nhấn vào bên trên
Chủ đề liên quan

Nội dung

Trường Đại Học Bách Khoa Hà Nội Đồ án I ĐỒ ÁN TỐT NGHIỆP: Đo điện áp xoay chiều hiển thị lên LCD Đo điện áp xoay chiều hiển thị lên LCD 2 Trường Đại Học Bách Khoa Hà Nội Đồ án I MỤC LỤC Trang Lời nói đầu………………………………………………………………... 3 PHẦN 1: CẤU TRÚC VI ĐIỀU KHIỂN 8051 VÀ ADC0804, LCD, EEPROM 24C02,RELAY,……………………………………………. Cấu trúc vi điều khiển 8051………………………………………………. Bộ biến đổi tương tự sang số ADC0804………………………………….. LCD……………………………………………………………………….. PHẦN 2: THIẾT KẾ HỆ THỐNG VÀ CODE CHƯƠNG TRÌNH……… Nguyên lý đo điện áp……………………………………………………... 4 Mạch đo…………………………………………………………………… 4 7 9 12 12 12 Lời nói đầu Ngày nay, các vi điều khiển đã thâm nhập vào mọi lĩnh vực vủa đời sống từ dân sự , quân sự đến an ninh quốc phòng, có mặt trong hầu hết các ứng dụng hàng Đo điện áp xoay chiều hiển thị lên LCD 3 Trường Đại Học Bách Khoa Hà Nội Đồ án I ngày từ những thiết bị nhỏ như điện thoại di động, máy nhắn tin, trò chơi điện tử, các thiết bị gia dụng(máy giặt, điều hòa, tủ lạnh….) đến những thiết bị lớn như ôtô, tàu thủy, xe lửa, máy bay, hệ thống mạng điện thoại, các bộ điều khiển tự động trong nhà máy, các bộ điều chỉnh trong nhà máy điện hạt nhân, trong các hệ thống điều khiển ánh sáng… Với một loạt các ứng dụng thú vị trên, ở đây chúng em xin giới thiệu một ứng dụng nhỏ dùng vi điều khiển 8051(cụ thể là vi điều khiển AT89S52) để thiết kế: “Thiết kế hệ thống rơ le số để bảo vệ quá dòng cho thiết bị điện, đo dòng từ 0÷20A, định và lưu được giá trị dòng cắt, hiển thị lên LCD”. Đây là một ứng dụng nhỏ của vi điều khiển nhưng thực tế sử dụng rất nhiều trong các hệ thống đo lường điện, điện tử như volt mét, ampe mét điện tử…vv. Đề tài gồm 2 phần: Phần 1:Cấu trúc vi điều khiển 8051 và ADC 0804, LCD, EEPROM 24C02, RELAY. Phần 2:Thiết kế hệ thống và code chương trình Mục đích của đề tài hướng đến: Tạo ra bước đầu cho sinh viên thử nghiệm những ứng dụng của vđk trong thực tiễn để rồi từ đó tìm tòi, phát triển nhiều ứng dụng khác trong đời sống hàng ngày cần đến. Mặc dù chúng em rất cố gắng để hoàn thành đồ án này đúng thời hạn ,nhưng không thể tránh khỏi những thiếu sót mong quí thầy cô thông cảm.Chúng em mong được sự đóng góp ý kiến của các thầy cô và các bạn. Chúng em xin chân thành cám ơn! Đo điện áp xoay chiều hiển thị lên LCD 4 Trường Đại Học Bách Khoa Hà Nội Đồ án I PHẦN 1: CẤU TRÚC VI ĐIỀU KHIỂN 8051 VÀ ADC0804, LCD, EEPROM 24C02, RELAY. A- Cấu trúc vi điều khiển 8051 IGiới thiệu tổng quan về họ 8051( AT 89S52) Họ vi điều khiển 8051(còn gọi là C51) là một trong những họ vi điều khiển thông dụng nhất. Đây là các bộ vi điều khiển 8 bít được sản xuất theo công nghệ CMOS. Một số loại vi điều khiển thuộc họ 8051 thông dụng nhất : AT89C2051, AT89C4051, AT89C51,AT89S52…Trong đó AT89S52 là một bộ vi điều khiển thông dụng giá rẻ có nhiều chức năng và đặc biệt có tích hợp sẵn bộ nạp trên chíp. Bộ vi điều khiển AT89S52 gồm các khối chức năng chính 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 và 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 thanh ghi. - Con trỏ ngăn xếp Bộ nhớ chương trình( Bộ nhớ ROM) gồm 8Kb Flash. Bộ nhớ dữ liệu( Bộ nhớ RAM) gồm 256 bytes. Bộ UART( Universal Ansynchronous Receiver and Tranmitter) làm chức năng truyền nhận nối tiếp, nhờ khối này, AT89S52 có thể giao tiếp với máy tính qua cổng COM. 3 bộ Timer /Counter 16 bít thực hiện các chức năng định thời và đếm sự kiện. WDM( Watch Dog Timer) được dùng để phục hồi lại hoạt động của CPU khi nó bị treo bởi một nguyên nhân nào đó. WDM ở AT89S52 gồm một bộ Timer 14 bít, một bộ Timer 7 bít, thanh ghi WDTPRG( WDT programable) điều khiển Timer 7 bit và một thanh ghi chức năng WDTRST( WDM register). Bình thường WDT không hoạt động( bị cấm), để cho phép WDT, các giá trị 1EH và E1H cần phải được ghi liên tiếp vào thanh ghi WDTRST. Timer 14 bit của WDT sẽ đếm tăng dần sau mỗi chu kỳ đồng hồ cho đến giá trị 16383 thì xảy ra tràn. Khi xảy ra tràn, chân RTS sẽ được đặt ở mức cao trong thời gian 96.Tosc (Tossc=1/Fosc) và AT89S52 sẽ được reset. Khi WDT hoạt động, ngoại trừ reset phần cứng và reset do WDT tràn thì không có cách nào cấm được WDT, vì vậy khi sử dụng WDT thì các đoạn mã chương trình phải được đặt trong các khe thời gian từ khi giữa các lần WDT được khởi tạo lại. Đo điện áp xoay chiều hiển thị lên LCD 5 Trường Đại Học Bách Khoa Hà Nội II- Đồ án I Sơ đồ các chân và chức năng 1. Port 0(P0.0-P0.7 hay từ chân 32 đến chân 39): Gồm 8 chân, ngoài chức năng xuất nhập ra, Port 0 còn là Bus đa hợp dữ liệu và địa chỉ (AD0-AD7), chức năng này sẽ được sử dụng khi AT89S52 giao tiếp với thiết bị ngoài có kiến trúc Bus. Đo điện áp xoay chiều hiển thị lên LCD 6 Trường Đại Học Bách Khoa Hà Nội Đồ án I 2. Port 1( P1.0-P1,7 hay từ chân 1 đến chân 8) : Có chức năng xuất nhập theo bit và byte. Ngoài ra, 3 chân P1.5, P1.6, P1.7 được dùng để nạp ROM theo chuẩn ISP, 2 chân P1.0 và P1.1 được dùng cho bộ Timer 2. 3. Port 2( P2.0- P2.7 hay từ chân 21 đến chân 28): Là một port có công dụng kép: là đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết kế dùng bộ nhớ mở rộng. Đo điện áp xoay chiều hiển thị lên LCD 7 Trường Đại Học Bách Khoa Hà Nội Đồ án I 4. Port 3( P3.0- P3.7 hay từ chân 10 đến chân 17): Mỗi chân trên port 3 ngoài chức năng xuất nhập ra còn có một chức năng riêng: Bit P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 Tên RXD TXD INT0 INT1 T0 T1 WR RD Chức năng Dữ liệu nhận cho port nối tiếp Dữ liệu phát cho port nối tiếp Ngắt 0 bên ngoài sNgắt 1 bên ngoài Ngõ vào của Timer/Counter 0 Ngõ vào của Timer/Counter 1 Xung ghi bộ nhớ dữ liệu bên ngoài Xung đọc bộ nhớ dữ liệu bên ngoài 5. RST( Reset- chân 9): Đo điện áp xoay chiều hiển thị lên LCD 8 Trường Đại Học Bách Khoa Hà Nội Đồ án I Mức tích cực của chân này là mức 1, để reset ta phải đưa mức 1(5V) đến chân này với thời gian tối thiểu 2 chu kỳ máy( tương đương 2uS đối với thạch anh 12MHz). 6. XTAL1, XTAL2: AT89S52 có một bộ dao động trên chip, nó thường được nối với một bộ dao động thạch anh có tần số lớn nhất là 33MHz, thông thường là 12MHz. 7. EA( External Access): EA thường được mắc lên mức cao(+5V) hoặc mức thấp( GND). Nếu ở mức cao, bộ vi điều khiển thi hành chương trình từ ROM nội. Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ mở rộng. 8. ALE( Address Latch Enable): ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửa đầu của chu kỳ bộ nhớ. Sau đó các đường port 0 dùng để xuất hoặc nhập dữ liệu trong nửa chu kỳ sau của bộ nhớ. 9. PSEN( Program Store Enable): PSEN là điều khiển để cho phép bộ nhớ chương trình mở rộng và thường được nối đến chân /OE ( Output Enable) của một EPROM để cho phép đọc các bytes mã lệnh. PSEN sẽ ở mức thấp trong thời gian đọc lệnh. Các mã nhị phân của chương trình được đọc từ EPROM qua Bus và được chốt vào thanh ghi lệnh của bộ vi điều khiển để giải mã lệnh. Khi thi hành chương trình trong ROM nội, PSEN sẽ ở mức thụ động( mức cao) 10.Vcc, GND: AT89S52 dùng nguồn một chiều có dải điện áp từ 4V-5.5V được cấp qua chân 40(+) và chân 20(-) B- Bộ biến đổi tương tự sang số ADC0804. Bộ ADC0804 là một thiết bị CMOS tích hợp với một bộ chuyển đổi tương tự sang số 8 bit, một bộ logic điều khiển tương thích. Bộ chuyển đổi tương tự sang số này sử dụng phương pháp chuyển đổi xấp xỉ, các lối ra dữ liệu song song, các lối ra này đều tương thích TTL. Thiết bị này loại trừ khả năng cần thiết để điều chỉnh điểm zero bên ngoài và khả năng điều chỉnh tỉ số làm cho ADC dễ dàng giao tiếp với các bộ vi xử lý. Đo điện áp xoay chiều hiển thị lên LCD 9 Trường Đại Học Bách Khoa Hà Nội Đồ án I Các đặc điểm của ADC0804 - Nguồn nuôi 5 V, hiệu suất cao. - Dãi tín hiệu lối vào tương tự 5V khi nguồn nuôi là +5V. Có thể mở rộng thang đo bằng các giải pháp kỹ thuật cho từng mạch cụ thể - Dễ dàng giao tiếp với vi xữ lý vì đầu ra co bộ đệm 3 trạng thái nên có thể ghép trực tiếp vào kênh dữ liệu của hệ VXL - Tổng sai số chưa chỉnh là ½ LSB. - Thời gian chuyển đổi 100s. - Bus dữ liệu 8 bit - Các tín hiệu đều tương thích TTL. - Tần số xung clock 10khz-1208khz. - Đảm bảo sai số tuyến tính trong dãi nhiệt độ từ -40 0C - 85 0C - Bộ phát xung nhịp nằm trên chip. - Không cần điều chỉnh điểm 0. - Dòng tiêu thụ cỡ 1.9m.  Sơ đồ chân ADC 0804:  Ý nghĩa các chân: - Các chân từ 11 đên 17 (DB7- DB1) : là các đầu ra số. - /CS cho phép chọn IC hoạt động - /RD chân tác động từ bên ngoài để IC thực hiện quá trình chuyển đổi. - CLKin : Đầu vào xung clock. - REF (+) : điện áp vào chuẩn +5V Đo điện áp xoay chiều hiển thị lên LCD 10 Trường Đại Học Bách Khoa Hà Nội Đồ án I - REF (-) :điện áp vào chuẩn 0v - VCC : nguồn cung cấp - AGND, RGND: chân nối đất. - Vref/2 : ½ điện áp chuẩn.  Hoạt động chuyển đổi: Quá trình biến đổi được bắt đầu bằng mộ xung thấp ngắn hạn ở lối vào /WR. Muốn thề điều kiện cần có là một mức thấp của tín hiệu /CS. Sau thời gian biến đổi 100s, lối ra /INTR chuyển sang mức thấp và báo hiệu việc kêt thúc quá trình biến đổi. Sau đó qua một mức thấp ở lối vào /RD có thể đọc ra các bit số liệu. Sự truy nhập để đọc sẽ dẫn đến hậu quả là tín hiệu /INTR sẽ chuyển trở lại mức cao. Khi mà lối vào /RD được chuyển sang mức thấp, thì lối ra /INTR chuyển sang thấp sau quá trình biến đổi kéo dài 8 chu kì giữ nhịp của bộ giữ nhịp bên trong, ở tần số giữ nhịp là 640khz, chi kì này là 12.5Пs C-LCD 1- Sơ đồ chân LCD: Chân Ký hiệu I/O Đo điện áp xoay chiều hiển thị lên LCD Mô tả 11 Trường Đại Học Bách Khoa Hà Nội 1 2 3 4 Vss Vcc VEE RS Đồ án I I Mass Dương nguồn 5v Cấp nguồn điều khiển tương phản RS=0 chon thanh ghi lệnh RS=1 chon thanh ghi dữ liệu 5 R/W I R/W=1 đọc dữ liệu, R/W=1 ghi 6 E I/O Cho phép 7 DB0 I/O Bit dữ liệu 8 DB1 I/O Nt 9 DB2 I/O Nt 10 DB3 I/O Nt 11 DB4 I/O Nt 12 DB5 I/O Nt 13 DB6 I/O Nt 14 DB7 I/O Nt Chân 15 và 16 là A và K. Nó được nối với 2 chân của 1 con Led dùng để sáng LCD trong bóng tối chúng ta không sử dụng. 2- Sơ đồ ghép nối LCD với vi điều khiển: 3- Nguyên lí hoạt động của LCD. - Chân VCC, Vss, và VEE: các chân VCC và VSS cáp dương nguồn 5v và mass tương ứng. Chân VEE được dùng để điều khiển độ tương phản. - Chân chọn thanh ghi RS(Register Select): có 2 thanh ghi trong LCD chân RS được dùng để chọn thanh ghi. nếu RS=0 thì thanh ghi mã lệnh được chọn để cho phép người dùng gửi 1 lệnh lên chẳng hạn như xoá màn hình, đưa con trỏ về đầu dòng… Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị lên LCD. Đo điện áp xoay chiều hiển thị lên LCD 12 Trường Đại Học Bách Khoa Hà Nội Đồ án I - Chân đọc/ghi (R/W): đầu vào đọc/ghi cho phép người dùng đọc thông tin từ LCD khi R/W=1 hoặc ghi thông tin lên LCD. - Chân cho phép E(Enable): chân cho phép được sử dụng bởi LCD để chốt dữ liệu của nó. Khi dữ liệu được cấp đến chân dữ liệu thì 1 xung mức cao xuống thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu. Xung này có độ rộng tối thiểu 450ns. - Chân DB0-DB7: đây là đường dữ liệu 8 bít, được dùng để gửi thông tin lên LCD hoặc đọc nội dung các thanh ghi trong LCD. Để hiển thị các chữ cái và các con số, chúng ta gửi mã ASCII của các chữ cái từ A đến Z , a đến z và các chữ số từ 0 đến 9 đến các chân này khi bật RS=1. - Bảng mã lệnh của LCD: Mã (HEX) 01 02 04 06 05 07 08 0a 0c 0e 0f 10 14 18 1c 80 0c0 38 Lệnh đến thanh ghi của LCD Xoá màn hình hiển thị Trở về đầu dòng Giảm con trỏ(dịch con trỏ sang trái ) Tăng con trỏ(dịch con trỏ sang phải) Dịch hiển thị sang phải Dịch hiển thị sang trái Tắt con trỏ, tắt hiển thị Tắt hiển thị, bật con trỏ Bật hiển thi, tắt con trỏ Bật hiển thị, nhấp nháy con trỏ Tắt con trỏ, nhấp nháy con trỏ Dịch vị trí con trỏ sang trái Dịch vị trí con trỏ sang phải Dịch toàn bộ hiển thị sang trái Dịch toàn bộ hiển thị sang phải Ép con trỏ về đầu dòng thứ nhất Ép con trỏ về đầu dòng thứ 2 Hai dòng và ma tận 5x7. C- EEPROM 24C02. 24C02 là một ROM điện erasable và lập trình. Nó có một 2Kbits kích thước bộ nhớ được sắp xếp trong 32 trang 8 byte. Có 256 (32 x 8) từ mỗi một byte. Dữ liệu được chuyển giao và nhận nối tiếp thông qua chân (SDA) dữ liệu nối tiếp. SCL là xung đầu vào và được sử dụng để đồng bộ hóa EEPROM với vi điều khiển cho các hoạt động khác nhau. Khi dữ liệu là để được đọc hoặc viết, lần đầu tiên một điều kiện bắt đầu được tạo ra tiếp theo địa chỉ điện thoại, địa chỉ byte và các dữ liệu chính nó. Cuối cùng, một điều kiện dừng được cung cấp. Điều kiện bắt đầu xảy ra khi SDA và SCL nhận được cao đến thấp đồng thời. Điều kiện dừng là khi SDA vẫn còn thấp trong khi SCL đi từ cao xuống thấp. Dữ liệu được đọc hoặc bằng văn bản giữa các điều kiện bắt đầu và dừng lại trên tất cả các quá trình Đo điện áp xoay chiều hiển thị lên LCD 13 Trường Đại Học Bách Khoa Hà Nội Đồ án I chuyển đổi của SCL từ cao đến thấp. Để biết thêm chi tiết về các hoạt động khác nhau và giải quyết, hãy tham khảo 24C02 interfacing với 8051. Tổng cộng có 8 EEPROMs có thể được kết nối thông qua một bus. Có ba chân địa chỉ vào AT24C02 để lựa chọn một con chip đặc biệt. Thiết bị này có thể được giải quyết serially bởi phần mềm. Nó làm cho việc sử dụng của một đăng ký nội bộ của EEPROM có 4 MSB bit 1010, tiếp theo là các bit địa chỉ EEPROM và LSB nghĩa cho dù dữ liệu sẽ được đọc hoặc bằng văn bản. Bit cuối cùng là 1 cho viết và 0 cho hoạt động đọc. Ví dụ, nếu một EEPROM tất cả các bit địa chỉ là có căn cứ, sau đó cho hoạt động viết một giá trị hex 0xA1 (1010 0001) sẽ được gửi. Đây 000, bit cuối cùng, địa chỉ EEPROM và 1 trong LSB cho thấy một hoạt động viết. Tương tự đối với hoạt động đọc địa chỉ thiết bị được gửi 0xA0 (1010 0000). Tiếp theo, địa chỉ byte hoặc trang được gửi bởi byte dữ liệu. Byte dữ liệu này phải được viết hoặc đọc bởi vi điều khiển. Pin No 1 2 3 4 5 Function Địa chỉ chân đầu vào; Cung cấp địa chỉ nhiều hơn một EEPROM là để giao tiếp với một vi điều khiển đơn Chân nối đất khi chỉ có một EEPROM được sử dụng Chân nối đất (0V) Bi-directional pin để chuyển dữ liệu nối tiếp 6 Cung cấp các tín hiệu xung đầu vào 7 Mặt đất bình thường cho phép đọc / ghi các chức Đo điện áp xoay chiều hiển thị lên LCD Name AD0 AD1 AD2 Ground Serial Data Serial Clock Write 14 Trường Đại Học Bách Khoa Hà Nội 8 năng; VCC cho phép viết bảo vệ Cung cấp điện áp; 5V (up to 5.5V) Đồ án I protect Vcc D- Relay Rơ le là thiết bị đóng cắt dòng điện, được dùng rộng rãi trong các thiết bị gia dũng cũng như các thiết bị trong công nghiệp. Rơ le cấu tạo gồm có cuộn hút, và các tiếp điểm, trong đó có những tiếp điểm thường đóng và tiếp điểm hở. Sơ đồ rơ le 8 chân PHẦN 2: THIẾT KẾ HỆ THỐNG VÀ CODE CHƯƠNG TRÌNH. INguyên lý đo dòng điện bằng điện trở Shunt. Điện trở Shunt để tạo ra một sụt áp tỷ lệ với dòng điện đi ngang qua nó, sau đó ta dựa trên sự sụt áp đo để tính toàn dòng điện cần đo. Sơ đồ khối đo dòng điện: Đo điện áp xoay chiều hiển thị lên LCD 15 Trường Đại Học Bách Khoa Hà Nội Dòng điện xoay chiều. (điện áp xoay chiều) Chỉnh lưu Qua điện trở shunt Đồ án I Chân +IN của ADC0804 Vi điều khiển 89S52 LCD 16x2 Chọn Vref = 5V. Như vậy điện áp đầu vào ADC (0÷5V), đầu ra là các giá trị số trong khoảng (0÷255). II- Mạch hệ thống 1- Các linh kiện sử dụng trong mạch. - Vi điều khiển 89s52 - ADC0804 - LCD 16x2 - EEPROM 24C02 - Relay 5V. - Điện trở shunt. - Ngoài ra còn 1 số linh kiện khác như điện trở, tụ điện, nút bấm, biến trở, diode cầu chỉnh lưu,… 2- Mạch nguyên lý. 3- Lưu đồ chương trình Đo điện áp xoay chiều hiển thị lên LCD 16 Trường Đại Học Bách Khoa Hà Nội Đồ án I start Đo dòng Định dòng cắt Hiện thị dòng đo và dòng cắt lên LCD Dòng đo > dòng cắt Relay=0 Relay =1 End 4- Chương trình. Chương trình viết bằng ngôn ngữ C ( sử dụng phần mềm Kile C). unsigned int i; //dung de doc ADC trong 5 lan lien tiep ADC_DATA_PORT = 0xff; adc_data_max=0; adc_data_min=255; //P3_7 = 1; for(i=0;i<250;i++) //lay mau trong 5 chu ky dien luoi { ADC_WR = 0; // WR = 0 ADC_WR = 1; // cho phep chuyen doi ADC delay_us(50); // doi chuyen doi xong if(ADC_DATA_PORT>adc_data_max) // Lay gia tri MAX { adc_data_max = ADC_DATA_PORT; } if(ADC_DATA_PORT=adc_data_min) ADC_DATA = adc_data_max - adc_data_min; //lay gia tri dinh dinh (pp) cua dong dien } void main() { char lcd_buff[33]; //bo dem du lieu dung de hien thi ra LCD unsigned int phan_nguyen,phan_thap_phan; //dung de lay phan nguyen va phan thap phan unsigned long nguong_cat = 15; //1A char qua_tai = 0; //co bao qua tai lcd_init(); lcd_clear(); CONTROL = 0; TANG = 1; //xuat ra muc 1 GIAM = 1; //xuat ra muc 1 RESET = 1; //xuat ra muc 1 nguong_cat = (unsigned long)eeprom_read(0x10); while(1) { ADC_convert(); // Goi chuong trinh doc ADC if(TANG == 0) { nguong_cat = nguong_cat+10; //moi lan tang 100mA delay_ms(100); if(nguong_cat>150) //gioi han toi da cua mach la 20Ampe { nguong_cat=150; } eeprom_write(0x10,(unsigned char)nguong_cat); //ghi vao bo nho eeprom } if(GIAM == 0) { nguong_cat = nguong_cat-10; //moi lan tang 100mA delay_ms(100); if(nguong_cat<1) //gioi han toi thieu nguong cat la 200mA Đo điện áp xoay chiều hiển thị lên LCD 18 Trường Đại Học Bách Khoa Hà Nội Đồ án I { nguong_cat=1; } eeprom_write(0x10,(unsigned char)nguong_cat); //ghi vao bo nho eeprom } phan_nguyen = nguong_cat/10; //doi don vi la ampe A phan_thap_phan = nguong_cat%10; //lay phan thap phan sau dau phay 2 chu so, vi du I = 3,543A se lay la 54 lcd_gotoxy(0,0); sprintf(lcd_buff,"NGUONG CAT=%d. %dA",phan_nguyen,phan_thap_phan); //hien thi ra lcd lcd_puts(lcd_buff); if(RESET == 0) { CONTROL = 0; //dong relay qua_tai = 0; //het bao qua tai } ADC_DATA = ADC_DATA*4990; //tinh theo don vi la mV de tranh mat du lieu ADC_DATA = ADC_DATA>>8; //bo chuyen doi ADC 8 bit co gia tri toi da la 255 ADC_DATA = ADC_DATA/sqrt(2); //lay gia tri hieu dung I ADC_DATA = ADC_DATA/18; //chuyen doi sang dong dien do duoc theo thuc te if(ADC_DATA >= nguong_cat) //che do qua tai { CONTROL = 1; //tat relay lcd_gotoxy(0,1); lcd_puts(" Qua tai "); qua_tai = 1; //bao hieu la dang qua tai } else if(qua_tai==0) //che do hien thi binh thuong { phan_nguyen = ADC_DATA/10; //doi don vi la ampe A Đo điện áp xoay chiều hiển thị lên LCD 19 Trường Đại Học Bách Khoa Hà Nội Đồ án I phan_thap_phan = ADC_DATA%10; //lay phan thap phan sau dau phay 2 chu so, vi du I = 3,543A se lay la 54 lcd_gotoxy(0,1); sprintf(lcd_buff,"I= %d.%d A ",phan_nguyen,phan_thap_phan); lcd_puts(lcd_buff); } } } CT eeprom: #include #include #define TRUE #define FALSE 1 0 #define SDA P3_7 //SDA eeprom #define SCK P3_6 #define RTC_DELAY 1 extern void delay_ms(unsigned int ms); extern void delay_us(unsigned int us); unsigned char i2c_start( void ); unsigned char i2c_stop( void ); unsigned char i2c_write_byte(unsigned char byte); unsigned char i2c_write(unsigned char Data); unsigned char i2c_read(unsigned char ack); unsigned char eeprom_read(unsigned char add); void eeprom_write(unsigned char add, unsigned char Data); unsigned char i2c_start( void ) { SDA=1; delay_us(RTC_DELAY); SCK=1; delay_us(RTC_DELAY); SDA=0; delay_us(RTC_DELAY); Đo điện áp xoay chiều hiển thị lên LCD 20 Trường Đại Học Bách Khoa Hà Nội Đồ án I SCK=0; delay_us(RTC_DELAY); return 0; } /* ----------stop i2c----------------*/ unsigned char i2c_stop( void ) { delay_us(RTC_DELAY); SDA=0; delay_us(RTC_DELAY); SCK=1; delay_us(RTC_DELAY); SDA=1; delay_us(RTC_DELAY); return 0; } unsigned char i2c_write(unsigned char Data) { unsigned char i = 0,j=0; SCK=0; for(i=0;i<8;i++) { if(Data&0x80) //bit hight { SDA=1; } else { SDA=0; //bit low } Data <<=1;//dich trai mot bit delay_us(RTC_DELAY); SCK=1; //SCL = 1 delay_us(RTC_DELAY); SCK=0; //SCL = 0 //delay_us(50); } delay_us(RTC_DELAY); j=SDA;//read ack SCK=1; //SCL = 1 delay_us(RTC_DELAY); SCK=0; //SCL = 0 return j; Đo điện áp xoay chiều hiển thị lên LCD 21 Trường Đại Học Bách Khoa Hà Nội Đồ án I } unsigned char i2c_read(unsigned char ack) { unsigned char i=0,Data=0; SCK=0; delay_us(RTC_DELAY); for(i=0;i<8;i++) { Data <<=1;//dich trai mot bit if(SDA) //bit hight { Data |=1; } //delay_us(1); SCK=1; //SCL = 1 delay_us(RTC_DELAY); SCK=0; //SCL = 0 delay_us(RTC_DELAY); } SDA=ack; //ack delay_us(RTC_DELAY); SCK=1; //SCL = 1 delay_us(RTC_DELAY); SCK=0; //SCL = 0 return Data; } unsigned char eeprom_read(unsigned char add) { unsigned char Data = 0; i2c_start(); i2c_write(0xA0); //control = w i2c_write(add); i2c_start(); i2c_write(0xA1); //command = read Data = i2c_read(1); i2c_stop(); return Data; } /*----------write a byte or multi byte to eeprom---------------*/ /* add: address cell eeprom data: du lieu can ghi ra len: lenght of data */ Đo điện áp xoay chiều hiển thị lên LCD 22 Trường Đại Học Bách Khoa Hà Nội Đồ án I void eeprom_write(unsigned char add, unsigned char Data) { i2c_start(); i2c_write(0xA0); i2c_write(add); i2c_write(Data); i2c_stop(); } CT LCD: #include #define LCD_PORT P1 /* pin E setting to 0 or 1 #define LCD_EN P3_1//PIN_E /* pin RS setting to 0 or 1 #define LCD_RS P3_2 /* Writing value to DATA pins #define LCD_DATA_OUT LCD_PORT #define ADC_INT P3_3 /* */ */ */ */ / ****************************************************************** ******/ /*============ KHOI TAO LCD===============================================*/ void lcd_init(void); /*============= TAO XUNG==================================================*/ void enable(void); /*================= HAM GUI 4 BIT THAP======================================*/ void set_lsb(unsigned char Data); /*==================HAM GUI 4 BIT CAO======================================*/ void set_msb(unsigned char Data); /*================= GUI LENH LEN LCD======================================*/ void put_cmd(unsigned char cmd); /*================== GUI 1 KI TU ====================================*/ Đo điện áp xoay chiều hiển thị lên LCD 23 Trường Đại Học Bách Khoa Hà Nội Đồ án I void lcd_putchar(char c); /*================== GUI 1 XAU KI TU==================================*/ void lcd_puts(char *s); void lcd_clear(void); / ****************************************************************** *****/ void lcd_gotoxy(unsigned char x,unsigned char y); void lcd_put_byte(unsigned char b); void delay_(unsigned long t); //tao tre cho LCD void delay_(unsigned long t) { volatile unsigned long i=0,j=0; for(i=0;i>4; } // ham gui lenh len lcd void put_cmd(unsigned char cmd) { LCD_RS=0; // chon thanh ghi lenh set_msb(cmd); enable(); Đo điện áp xoay chiều hiển thị lên LCD 24 Trường Đại Học Bách Khoa Hà Nội Đồ án I set_lsb(cmd); enable(); } //ham gui 1 ki tu len lcd void lcd_putchar(char c) { LCD_RS=1; // chon thanh ghi du lieu set_msb(c); enable(); set_lsb(c); enable(); } //ham gui xau ki tu len lcd void lcd_puts(char *s) { while(*s) { lcd_putchar(*s); s++; }; } // khoi tao lcd void lcd_init(void) { //LCD_ALL_DIR_OUT(); //LCD_DATA_DIR_OUT(); delay_(5); LCD_RS=0; // gui lenh len lcd set_lsb(0x03); enable(); enable(); enable(); set_lsb(0x02); enable(); put_cmd(0x28); // che do 4 bit,lcd 2 dong, co chu 5x7 put_cmd(0x0D); // bat hien thi,tat con tro 0x0C put_cmd(0x06); } // xoa lcd void lcd_clear(void) { put_cmd(0x01); } Đo điện áp xoay chiều hiển thị lên LCD 25 Trường Đại Học Bách Khoa Hà Nội Đồ án I void lcd_put_byte(unsigned char b) { LCD_RS=0; delay_(5); LCD_EN=0; // send the high nibble LCD_DATA_OUT=b>>4; delay_(5); LCD_EN=1; delay_(5); LCD_EN=0; // send the low nibble LCD_DATA_OUT=b&0x0F; delay_(5); LCD_EN=1; delay_(5); LCD_EN=0; } void lcd_gotoxy(unsigned char x, unsigned char y) { unsigned char address; if(y!=0) address=0x40; else address=0; address += x; lcd_put_byte(0x80|address); } Đo điện áp xoay chiều hiển thị lên LCD 26 Trường Đại Học Bách Khoa Hà Nội Đồ án I Tài liệu tham khảo: Họ vi điều khiển 8051 – Tống Văn On Cấu trúc và lập trình học Vi điều khiển 8051 – Nguyễn Tăng Cường Ngoài ra chúng em còn thu thập tài liệu và thông tin trên internet. …… Đo điện áp xoay chiều hiển thị lên LCD 27
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.