1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD

44 143 8

Đ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

Thông tin cơ bản

Định dạng
Số trang 44
Dung lượng 1,59 MB

Cấu trúc

  • 1.1. Lý do chọn đề tài (4)
  • 1.2. Mục tiêu nghiên cứu (4)
  • 1.3. Phạm vi nghiên cứu (4)
  • 1.4. Kết quả đạt được (4)
  • CHƯƠNG 2 CƠ SỞ LÝ THUYẾT (5)
    • 2.1. Phân tích đề tài (5)
    • 2.2. Lựa chọn thiết bị phần cứng (5)
      • 2.2.1. Vi xử lí: STM32F407 Discovery (5)
      • 2.2.2. Chuông điện (6)
      • 2.2.3. Module DS1307 (6)
      • 2.2.4. Relay module (7)
      • 2.2.5. Màn hình LCD 16x2 (8)
      • 2.2.6. Resistor (9)
      • 2.2.7. Nút nhấn nhả (10)
      • 2.2.8. Biến trở Volume (10)
    • 2.3. Phần mềm hỗ trợ lập trình (11)
      • 2.3.1. STM32CubeMX (11)
      • 2.3.2. KeilC V5 (11)
    • 2.4. Sơ đồ nguyên lý của hệ thống (12)
      • 2.4.1. Khối thời gian thực DS1307 (RTC) (12)
      • 2.4.2. Khối điều khiển (12)
      • 2.4.3. Khối vi xử lý (13)
      • 2.4.4. Khối hiển thị (13)
      • 2.4.5. Khối chuông báo (14)
    • 2.5. Sơ đồ nguyên lý (14)
  • CHƯƠNG 3 THIẾT KẾ (15)
    • 3.1. Kết nối phần cứng (15)
    • 3.2. Sơ đồ giải thuật (15)
    • 3.3. Phương trình giải thuật (16)
    • 3.4. Code cho hệ thống (16)
    • 3.5. Thử nghiệm trên mô hình (41)
    • 3.6. Kết quả thử nghiệm (42)
  • CHƯƠNG 4: KẾT LUẬN (43)
    • 4.1. Kết quả đạt được (43)
    • 4.2. Hạn chế (43)
    • 4.3. Hướng phát triển (43)
  • Tài liệu tham khảo (44)

Nội dung

Mục tiêu nghiên cứu

• Mục tiêu của bộ sản phẩm

- Sử dụng dùng để thông báo thời gian

- Người sử dụng có thể cài đặt thời gian báo theo mong muốn

Kết quả đạt được

- Có thể sử dụng thay thế cho việc đánh trống báo giời học cở các trường học và làm chuông báo thức

CƠ SỞ LÝ THUYẾT

Phân tích đề tài

Nhóm em thiết kế hệ thống chuông báo giờ tự động sử dụng bộ vi xử lý SMT32F407 Discovery kết hợp với modul thời gian thực DS1307 để hiển thị thời gian trên LCD 16x2 Hệ thống sẽ có 4 nút điều chỉnh: Nút 1 (mode) để chuyển đổi vùng cài đặt, Nút 2 (ok) để lưu thông tin, Nút 3 (up) để tăng số đếm, và Nút 4 (down) để giảm số đếm Khi relay nhận tín hiệu mức 1, chuông báo sẽ reo liên tục trong 5 giây và sau đó ngắt Người dùng có thể cài đặt thời gian dựa trên lịch học của trường trong phần cài đặt.

Lựa chọn thiết bị phần cứng

- Với đề tài mạch chuông báo giờ nhóm em đã lựa chọn những thiết bị phần cứng phù hợp với mạch:

2.2.1.Vi xử lí: STM32F407 Discovery

- Kit phát triển STM32F407 Discovery được thiết kế với các phần thí nghiệm cơ bản:

Cổng USB, đèn LED, nút bấm và bộ nhớ Flash ngoài là những tính năng nổi bật của kit, bên cạnh đó còn tích hợp cổng nạp chuẩn Jtag, cổng UART, NRF24L01 và LCD, giúp mở rộng khả năng thực hiện nhiều thí nghiệm khác nhau, rất phù hợp cho những ai mới bắt đầu tìm hiểu về STM32.

• Nguồn sử dụng: 5VDC từ cổng USB hoặc chân GPIO

• Thiết kế ra chân GPIO đầy đủ

• Tích hợp bộ nhớ Flash

• Tích hợp cổng nạp chuẩn Jtag

• Tích hợp khe cắm mạch RF NRF24L01+, UART, LCD,

• Bộ vi điều khiển STM32F407 Discovery có 32-bit Arm ® Cortex ® -M4 với lõi FPU, bộ nhớ Flash 1-Mbyte và RAM 192-Kbyte trong gói LQFP100

Hình 2.2: STM32F407 Discovery ARM Cortex-M3

- Chuông điện 3inch nhà thờ, trường học, nhà xưởng villa báo động 220V 60dB

• Chuông điện 220V là chuông dùng trực tiếp nguồn điện

Hình 2.3: Chuông điện 6 inch 12VDC - 220V- Đường kính 15cm

Module DS1307 (RTC) là một trong những module đồng hồ thời gian thực (RTC) phổ biến và giá cả phải chăng Nó có khả năng theo dõi chính xác thời gian, bao gồm giây, phút, giờ, ngày, tháng và năm.

- Một số tính năng quan trọng của DS1307 là:

• Khả năng tạo sóng vuông có thể lập trình

• Cơ số mặc định là BCD

• Dòng điện thấp, dưới 500mA trong chế độ sao lưu pin

• Khả năng thiết lập ngày đến năm 2100

• Sử dụng chuẩn giao tiếp I2C

• Các thành phần cần thiết như thạch anh 32768kHz, điện trở pull-up và tụ lọc nguồn đều được tích hợp trên board

• 5-pin bao gồm giao thức I2C sẵn sàng giao tiếp: INT (QWO), SCL, SDA, VCC và GND

• Điện áp làm việc: 3.3V đến 5V

- Module DS1307 sử dụng pin CR2023 3 volt Bộ nhớ EEPROM 24c32 nhúng trên mô-đun này có thể tiết kiệm 32kb dữ liệu

- Ngoài ra, các bạn có thể đo nhiệt độ môi trường bằng cách sử dụng cảm biến

DS18B20 đã được tích hợp sẵn trên board mạch

- Đọc giá trị điện áp của pin từ chân BAT

• GND: Nối vào cực âm của mạch

• SCL: Nối Vào chân SCL của STM32F407

• SDA: Nối Vào chân SDA của STM32F407

Chuông điện hoạt động với nguồn điện 220V AC, do đó cần sử dụng một relay để kết nối với dây GND của chuông Khi relay ở trạng thái 0 (không nhận tín hiệu từ vi điều khiển), chuông sẽ không hoạt động.

8 điện không hoạt động, khi relay ở mức 1(có tín hiệu từ vi điều khiển 3,3V) thì chuông điện hoạt động do chân COM và chân NO được nối với nhau

• Ba lỗ để bắt vít cố định có đường kính 3.1mm

• Opto cách ly quang, chống nhiễu

• Có đèn báo đóng ngắt trên Relay

• Điện áp sử dụng: 5VDC

• Đầu ra điện thê đóng ngắt tối đa: DC 30V / 10A, AC 250V / 10A

LCD 16x2 (Liquid Crystal Display) là một thành phần quan trọng trong nhiều ứng dụng của Vi Điều Khiển nhờ vào những ưu điểm vượt trội như khả năng hiển thị đa dạng ký tự, bao gồm chữ, số và ký tự đồ họa Thiết bị này dễ dàng tích hợp vào các mạch ứng dụng thông qua nhiều giao thức giao tiếp khác nhau, đồng thời tiêu tốn ít tài nguyên hệ thống và có giá thành phải chăng Vì vậy, việc sử dụng LCD 16x2 là lựa chọn hợp lý cho các dự án yêu cầu hiển thị thông tin một cách hiệu quả.

1 hàng để hiển thị thứ/ ngày và 1 hàng để thể hiện giờ, vì vậy nhóm em đã chọn màn hình LCD 16x2

• Hiển thị tối đa 16 tự trên 2 dòng

• Chữ đen nền xanh lá

Chức năng các chân của LCD:

+ Chân 1: (Vss) Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với

GND của mạch điều khiển

+ Chân 2: VDD Là chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với VCC = 5V của mạch điều khiển

+ Chân 3: V0 là chân điều chỉnh độ tương phản của LCD

+ Chân 4: RS Là chân chọn thanh ghi (Register select) Nối chân RS với logic

“0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi:

- Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ

“ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)

- Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD

Pin 5, known as R/W, is used to select the read/write mode for the LCD Connect the R/W pin to logic "0" to enable write mode, or connect it to logic "1" to switch to read mode.

+ Chân 6: E Là chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus

DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E

Khi ở chế độ ghi, dữ liệu trên bus sẽ được chuyển vào thanh ghi nội bộ của LCD khi phát hiện một xung chuyển tiếp từ cao xuống thấp của tín hiệu chân.

Khi ở chế độ đọc, dữ liệu sẽ được LCD xuất ra các chân DB0-DB7 khi phát hiện sự chuyển đổi từ mức thấp sang mức cao (low-to-high transition) tại chân E, và dữ liệu này sẽ được giữ trên bus cho đến khi chân E trở về mức thấp.

+ Chân 7 - 14: DB0 - DB7 - Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU Có 2 chế độ sử dụng 8 đường bus này:

- Chế độ 8 bit: Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7

- Chế độ 4 bit: Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7

+ Chân 15: Nguồn dương cho đèn nền

+ Chân 16: GND cho đèn nền

Hình 2.6: LCD 16x2(Liquid Crystal Display)

• Loại: Điện trở cố định

Điện trở 4.7K Ohm là loại điện trở kim loại film cacbon, với các vạch màu trên thân thể hiện trị số theo quy ước toàn cầu Đây là linh kiện điện tử thụ động, có công suất 1/4W, chuyên dùng để cản trở dòng điện với dung sai chỉ +/-5% Kích thước của điện trở này rất nhỏ, dài 6.5mm, rộng 2mm và chân cắm 0.5mm, phù hợp với nhiều ứng dụng trong mạch điện Nhiệt độ hoạt động của điện trở này cũng rất đa dạng.

55 o C đến 155 o C và dải điện áp rộng thích hợp với nhiều mạch điện tử

Nút nhấn nhả R13-507 16mm màu xanh là thiết bị điện có chức năng nhấn xuống để đóng mạch và tự động trở về trạng thái hở mạch khi thả tay Sản phẩm này rất phù hợp cho các ứng dụng như mô hình, đồ án, chế tạo và trong ngành công nghiệp.

• Kích thước khoan lỗ lắp đặt : 16mm

• Nút bền, độ nhạy, độ nảy tốt

• Có sẵn đai ốc siết chặt

Biến trở là một điện trở ba cực với tiếp điểm trượt hoặc xoay, hoạt động như một bộ chia điện áp chỉnh được Khi chỉ sử dụng hai đầu ra, nó trở thành điện trở thay đổi hoặc biến trở Dụng cụ đo gọi là chiết áp thực chất là bộ chia điện áp dùng để đo điện thế Chiết áp thường được sử dụng để điều khiển các thiết bị điện, như âm lượng trên thiết bị âm thanh Khi thanh trượt được vận hành bởi cơ chế xác định, nó có thể làm đầu dò vị trí, ví dụ trong joystick Tuy nhiên, chiết áp hiếm khi được dùng để điều khiển công suất lớn hơn một watt, vì công suất tiêu tán trong chiết áp sẽ tương đương với công suất tải điều khiển.

Phần mềm hỗ trợ lập trình

STM32CubeMX là công cụ lý tưởng để cấu hình và tạo mã cho MCU STM32, giúp lập trình viên thực hiện các công việc cấu hình và nâng cấp thông qua giao diện đồ họa Điều này không chỉ đơn giản hóa quá trình lập trình trên STM32 mà còn tiết kiệm thời gian nghiên cứu và phát triển.

Hình 2.7: Phần mềm STM32CubeMX

Hiện nay, có nhiều trình biên dịch ngôn ngữ C cho 8051 như Mikro C, LAR, SDCC, và Reads 51 Trong số đó, Vision của công ty Keil Software, thường được gọi là Keil C, là một môi trường phát triển tích hợp (IDE) mạnh mẽ và phổ biến Keil C hỗ trợ lập trình cho các chip vi điều khiển 8051 và ARM từ tất cả các hãng trên thế giới.

Hình 2.8: Phần mềm KeilC Version 5

Sơ đồ nguyên lý của hệ thống

2.4.1.Khối thời gian thực DS1307 (RTC)

- Chân SDA và SCL của DS1307 đc nối với chân SDA và SCL của SMT32F407 (khi cài đặt I2C trên STM32F407 sẽ xuất hiện chân SDA và SCL)

- Chân SDA và SCL được nối với điện trở 4.7kΩ, 2 con điện trở sẽ được nối với nguồn 5VAC

- DS1307 sẽ giúp hiển thị thời gian thực chính xác khi được kết nối qua vi điều khiển để xuất tín hiệu lên LCD để hiển thị thời gian

- Khối điều khiển bao gồm 4 nút nhấn, mỗi nút nhấn có các chức năng khác nhau:

• Nút 1( Mode): Được nối với điện trở 4.7kΩvà nguồn 5VAC Nối với chấn PA9 của vi điều khiển để xuất tín hiệu

• Nút 2( Ok): Được nối với điện trở 4.7kΩvà nguồn 5VAC Nối với chấn PA10 của vi điều khiển để xuất tín hiệu

• Nút 3( Up): Được nối với điện trở 4.7kΩvà nguồn 5VAC Nối với chấn PA11 của vi điều khiển để xuất tín hiệu

• Nút 4( Down): Được nối với điện trở 4.7kΩvà nguồn 5VAC Nối với chấn PA12 của vi điều khiển để xuất tín hiệu

Hình 2.11: Khối vi xửa lý

Khối vi xử lý nhận mã lập trình từ Keil C và xử lý các tín hiệu đầu vào từ các nút (nút 1, nút 2, nút 3, nút 4) cùng với DS1307 để xuất tín hiệu ra màn hình LCD và relay.

Nhiệm vụ của hệ thống là nhận tín hiệu từ vi điều khiển và hiển thị trên màn hình LCD Biến trở có chức năng điều chỉnh độ sáng của LCD, giúp người dùng dễ dàng quan sát các thông số hiển thị một cách rõ ràng.

Relay nhận tín hiệu từ vi điều khiển để thay đổi trạng thái thường mở và thường đóng Khi nhận tín hiệu thường mở, relay sẽ đóng lại dòng điện 220V AC, cho phép chuông phát tín hiệu.

Sơ đồ nguyên lý

Hình 2.14: Sơ đồ nguyên lý

THIẾT KẾ

Kết nối phần cứng

- Dựa vào sơ đồ nguyên lý nhóm em có thống kê về các I/O ngõ vào và ngõ ra của vi xửa lý:

+ SAD và SCL là ngõ vào của DS1307 nối với chân PB6(SCL) và PB7(SDA) của vi xử lý

+ Input: Nút 1, nút 2, nút 3 và nút 4 được nối lần lượt với PA9(Mode), PA10(Ok), PA13(Up) và PA14(Down) của vi xử lý

+ Chân RS, E, D4, D5, D6, D7 của LCD được nối lần lượt với chân PE0, PE1, PE2, PE3, PE4, PE5 của vi xử lý

+ Output: Chân IN của relay được nối vào chân PB1 của vi xử lý.

Sơ đồ giải thuật

Hình 3.1: Sơ đồ giả thuật

Phương trình giải thuật

Hình 3.2: Phương trình giải thuật.

Code cho hệ thống

This article discusses the initialization of variables for a real-time clock application in C programming It defines a 16-bit variable for GPIO pin configuration and several 8-bit variables to store time components such as hours, minutes, seconds, day, month, and year Additionally, it includes arrays for time data and send data, along with character arrays for LCD display The code also initializes various flags and counters for alarm settings, allowing for multiple alarm configurations and user interactions.

I2C_HandleTypeDef hi2c1; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_I2C1_Init(void); uint8_t BCD2DEC (uint8_t data)

} uint8_t DEC2BCD(uint8_t data)

MX_I2C1_Init(); lcd_init (); lcd_puts (0,0,(int8_t*)datalcd); sendData[0]2BCD (00); sendData[1]2BCD (57); sendData[2]2BCD (6); sendData[3]2BCD (1); sendData[4]2BCD (26); sendData[5]2BCD (12); sendData[6]2BCD (21);

HAL_I2C_Mem_Write_IT(&hi2c1, 0x68) { phutbaothuc1 ; if(phutbaothuc1 ==0) { phutbaothuc1 Y;

// nut ok if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) {

////// if (chapnhan ==2) { sprintf (datalcd , "sbaothuc1:%02d :", giaybaothuc1 ); lcd_puts (0,0,(int8_t*) datalcd);

// nut up if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

{ while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0) {

// nut down if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) {

} if(j>) { giaybaothuc1 ; if(giaybaothuc1 ==0) { giaybaothuc1 Y;

// nut ok if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) {

//////cai gio và phut bao thuc 2//////////////////////////////////////////////////////////////////// if (chapnhan ==3)

{ sprintf (datalcd , "hbaothuc2:%02d :", giobaothuc2 ); lcd_puts (0,0,(int8_t*) datalcd);

// nut up if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

{ while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0) {

} if(j>) { giobaothuc2 ++; if(giobaothuc2 >23) { giobaothuc2 =0;

// nut down if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) {

// nut ok if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) {

{ sprintf (datalcd , "pbaothuc2:%02d :", phutbaothuc2 ); lcd_puts (0,0,(int8_t*) datalcd);

// nut up if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

{ while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0) {

} if(j>) { phutbaothuc2 ++; if(phutbaothuc2 >59) { phutbaothuc2=0;

// nut down if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) {

} if(j>) { phutbaothuc2 ; if(phutbaothuc2 ==0) { phutbaothuc2 Y;

// nut ok if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) {

// nut up if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

{ while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0) {

} if(j>) { giaybaothuc2 ++; if(giaybaothuc2 >59) { giaybaothuc2=0;

// nut down if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) {

} if(j>) { giaybaothuc2 ; if(giaybaothuc2 ==0) { giaybaothuc2 Y;

// nut ok if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) {

28 while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) {

///////cai gio phut bao thuc 3/////////////////////////////////////////////////////////////////// if (chapnhan ==6)

{ sprintf (datalcd , "hbaothuc3:%02d :", giobaothuc3 ); lcd_puts (0,0,(int8_t*) datalcd);

// nut up if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

{ while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0) {

} if(j>) { giobaothuc3 ++; if(giobaothuc3 >23) { giobaothuc3 =0;

// nut down if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) {

29 while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) {

} if(j>) { giobaothuc3 ; if(giobaothuc3 ==0) { giobaothuc3 #;

// nut ok if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) {

{ sprintf (datalcd , "pbaothuc3:%02d :", phutbaothuc3 ); lcd_puts (0,0,(int8_t*) datalcd);

// nut up if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

{ while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0) {

// nut down if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) {

} if(j>) { phutbaothuc3 ; if(phutbaothuc3 ==0) { phutbaothuc3 Y;

// nut ok if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) {

} } } ////// if (chapnhan ==8) { sprintf (datalcd , "sbaothuc3:%02d :", giaybaothuc3 ); lcd_puts (0,0,(int8_t*) datalcd);

// nut up if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

{ while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0) {

// nut down if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) {

// nut ok if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) {

} } } /////////cai gio va phut bao thuc 4///////////////////////////////////////////////////////////////// if (chapnhan ==9) { sprintf (datalcd , "hbaothuc4:%02d :", giobaothuc4 ); lcd_puts (0,0,(int8_t*) datalcd);

// nut up if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

{ while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

// nut down if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0)

} if(j>) { giobaothuc4 ; if(giobaothuc4 ==0) { giobaothuc4 #;

// nut ok if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0)

{ while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0)

} } } if (chapnhan =) { sprintf (datalcd , "pbaothuc4:%02d :", phutbaothuc4 ); lcd_puts (0,0,(int8_t*) datalcd);

// nut up if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

{ while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

} if(j>) { phutbaothuc4 ++; if(phutbaothuc4 >59) { phutbaothuc4 =0;

// nut down if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0)

} if(j>) { phutbaothuc4 ; if(phutbaothuc4 ==0) { phutbaothuc4 Y;

// nut ok if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0)

{ sprintf (datalcd , "sbaothuc4:%02d :", giaybaothuc4 ); lcd_puts (0,0,(int8_t*) datalcd);

// nut up if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

{ while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_13)==0)

} if(j>) { giaybaothuc4 ++; if(giaybaothuc4 >59) { giaybaothuc4 =0;

// nut down if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_14)==0)

} if(j>) { giaybaothuc4 ; if(giaybaothuc4 ==0) { giaybaothuc4 Y;

// nut ok if (HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0) { while(HAL_GPIO_ReadPin( GPIOA,GPIO_PIN_10)==0)

} void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c)

If the instance of hi2c matches hi2c1, the variables giay, phut, gio, thu, ngay, thang, and nam are assigned values by converting the corresponding elements of timedata from BCD to decimal format using the BCD2DEC function.

/** Configure the main internal regulator output voltage

HAL_RCC_PWR_CLK_ENABLE();

HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLT AGE_SCALE1);

/** Initializes the RCC Oscillators according to the specified parameters

* in the RCC_OscInitTypeDef structure

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;

RCC_OscInitStruct.PLL.PLLQ = 4; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

/** Initializes the CPU, AHB and APB buses clocks

RCC_ClkInitStruct.ClockType RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) ! HAL_OK)

*/ static void MX_I2C1_Init(void)

The I2C1 initialization code configures the hi2c1 instance with a clock speed of 400 kHz, a duty cycle of 2, and sets the addressing mode to 7-bit It disables dual address mode and general call mode, while ensuring no stretch mode is applied The initialization process is completed by calling HAL_I2C_Init, which returns an error status if the setup is unsuccessful.

*/ static void MX_GPIO_Init(void)

HAL_RCC_GPIOE_CLK_ENABLE();

HAL_RCC_GPIOH_CLK_ENABLE();

HAL_RCC_GPIOB_CLK_ENABLE();

HAL_RCC_GPIOA_CLK_ENABLE();

/*Configure GPIO pin Output Level */

GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5

|GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);

/*Configure GPIO pin Output Level */

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

/*Configure GPIO pins : PE2 PE3 PE4 PE5

GPIO_InitStruct.Pin GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_1;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

/*Configure GPIO pins : PA9 PA10 PA13 PA14 */

GPIO_InitStruct.Pin GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_13|GPIO_PIN_14;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

* @brief This function is executed in case of error occurrence

/* USER CODE BEGIN Error_Handler_Debug */

/* User can add his own implementation to report the HAL error return state */

/* USER CODE END Error_Handler_Debug */

* @brief Reports the name of the source file and the source line number

* where the assert_param error has occurred

* @param file: pointer to the source file name

* @param line: assert_param error line source number

*/ void assert_failed(uint8_t *file, uint32_t line)

/* User can add his own implementation to report the file name and line number, tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

Thử nghiệm trên mô hình

Hình 3.3: Kết nối mô phỏng phần cứng

Kết quả thử nghiệm

Hình 3.4: Bảng kết quả thí nghiệm

Ngày đăng: 08/02/2022, 13:49

HÌNH ẢNH LIÊN QUAN

Hình 2.1: Sơ đồ khối. - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.1 Sơ đồ khối (Trang 5)
Hình 2.3: Chuông điện 6 inch 12VDC - 220V- Đường kính 15cm - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.3 Chuông điện 6 inch 12VDC - 220V- Đường kính 15cm (Trang 6)
Hình 2.2: STM32F407 Discovery ARM Cortex-M3. - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.2 STM32F407 Discovery ARM Cortex-M3 (Trang 6)
Hình 2.4: Module DS1307(RTC). - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.4 Module DS1307(RTC) (Trang 7)
Hình 2.5: Relay module. - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.5 Relay module (Trang 8)
Hình 2.6: LCD 16x2(Liquid Crystal Display) - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.6 LCD 16x2(Liquid Crystal Display) (Trang 9)
Hình 2.7: Resistor. - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.7 Resistor (Trang 10)
Hình 2.8: Nút nhấn nhả. - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.8 Nút nhấn nhả (Trang 10)
Hình 2.9: Biến trở Volume. - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.9 Biến trở Volume (Trang 11)
Hình 2.9: Khối DS1307 (RTC). - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.9 Khối DS1307 (RTC) (Trang 12)
Hình 2.10: Khối điều khiển. - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.10 Khối điều khiển (Trang 12)
Hình 2.12: Khối hiển thị. - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.12 Khối hiển thị (Trang 13)
Hình 2.11: Khối vi xửa lý. - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.11 Khối vi xửa lý (Trang 13)
Hình 2.13: Khối chuông báo. - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
Hình 2.13 Khối chuông báo (Trang 14)
2.5. Sơ đồ nguyên lý. - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN  THIẾT KẾ MẠCH BÁO CHUÔNG GIỜ HỌC DÙNG REALTIME  DS1307 HIỂN THỊ TRÊN MÀN HÌNH LCD
2.5. Sơ đồ nguyên lý (Trang 14)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w