Κοινή χρήση τεχνολογίας

[TB Works] Σχεδιασμός προσομοίωσης 51 MCU Proteus του διαρκούς ημερολογίου LCD12864 και συστήματος παρακολούθησης θερμοκρασίας που βασίζεται σε MCU

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Εισαγάγετε την περιγραφή της εικόνας εδώ

Έκθεση πειράματος: Σχεδιασμός διαρκούς ημερολογίου LCD12864 και συστήματος παρακολούθησης θερμοκρασίας με βάση μικροελεγκτή

Ιστορικό εισαγωγή

Αυτό το πείραμα στοχεύει να σχεδιάσει και να εφαρμόσει ένα σύστημα διαρκούς ημερολογίου που βασίζεται στην οθόνη LCD12864 του μικροελεγκτή STC89C52 και να ενσωματώσει έναν αισθητήρα θερμοκρασίας για την υλοποίηση της λειτουργίας παρακολούθησης θερμοκρασίας. Το σύστημα διαθέτει ωριαία λειτουργία κουδουνίσματος και συναγερμού, καθώς και προτροπές μέσω του βομβητή. Αυτός ο σχεδιασμός όχι μόνο μπορεί να πραγματοποιήσει βασική ένδειξη ρολογιού και θερμοκρασίας, αλλά έχει επίσης ορισμένες λειτουργίες συναγερμού, καθιστώντας το κατάλληλο για σενάρια σπιτιού ή γραφείου.

Εισαγωγή υλικού

  1. Μικροελεγκτής STC89C52: Ως βασικός ελεγκτής του συστήματος, είναι υπεύθυνος για το χειρισμό της υλοποίησης διαφόρων λειτουργιών.
  2. Οθόνη LCD 12864: Χρησιμοποιείται για την εμφάνιση πληροφοριών όπως ώρα, ημερομηνία και θερμοκρασία.
  3. Αισθητήρας θερμοκρασίας DS18B20: Χρησιμοποιείται για την παρακολούθηση της θερμοκρασίας περιβάλλοντος σε πραγματικό χρόνο.
  4. βομβητής: Χρησιμοποιείται για ωριαία υπενθύμιση και ξυπνητήρι.
  5. Μονάδα κουμπιού: Χρησιμοποιείται για τους χρήστες για τη ρύθμιση των λειτουργιών ώρας και αφύπνισης.
  6. Άλλα ηλεκτρονικά εξαρτήματα: Όπως αντιστάσεις, πυκνωτές κ.λπ., που χρησιμοποιούνται για κατασκευή κυκλωμάτων και σταθερή λειτουργία.

σχεδιασμός κυκλώματος

Το κύκλωμα αποτελείται κυρίως από μικροελεγκτή, οθόνη LCD, αισθητήρα θερμοκρασίας και βομβητή. Η οθόνη LCD12864 συνδέεται με τον μικροελεγκτή μέσω παράλληλης διεπαφής, ο αισθητήρας θερμοκρασίας DS18B20 συνδέεται με τον μικροελεγκτή μέσω μιας διασύνδεσης ενός καλωδίου και ο βομβητής ελέγχεται μέσω της θύρας I/O του μικροελεγκτή.

Βασικές οδηγίες σύνδεσης

  1. Οθόνη LCD 12864
    • Οι θύρες δεδομένων D0-D7 συνδέονται στη θύρα P0 του μικροελεγκτή.
    • Τα σήματα ελέγχου RS, RW και E συνδέονται με τα P2.0, P2.1 και P2.2 του μικροελεγκτή αντίστοιχα.
  2. Αισθητήρας θερμοκρασίας DS18B20
    • Η θύρα δεδομένων DQ συνδέεται στη θύρα P3.7 του μικροελεγκτή.
  3. βομβητής
    • Συνδέστε στη θύρα P2.0 του μικροελεγκτή.
  4. Μονάδα κουμπιού
    • Κάθε κουμπί συνδέεται στη θύρα P1 του μικροελεγκτή, η οποία χρησιμοποιείται για τη σάρωση και τον εντοπισμό της κατάστασης του κουμπιού.

σχεδιασμό λογισμικού

αρχικοποίηση συστήματος

Αφού ενεργοποιηθεί το σύστημα, αρχικοποιείται πρώτα, συμπεριλαμβανομένης της προετοιμασίας της οθόνης LCD, της προετοιμασίας ρολογιού, της προετοιμασίας διακοπής κ.λπ. Ο κωδικός αρχικοποίησης είναι ο εξής:

void main( void )
{
	uchar	clock_time[6]	= { 0X00, 0X59, 0X23, 0X09, 0X04, 0X11 };       /* 定义时间变量 秒  分 时 日 月 年 */
	uchar	alarm_time[2]	= { 10, 06 };                                   /* 闹钟设置  alarm_time[0]: 分钟  alarm_time[1] :小时 */
	uchar	temperature[2];                                                 /* 定义温度变量   temperature[0]  低8位   temperature[1]  高8位 */
	Lcd_Initial();                                                          /* LCD初始化 */
	Clock_Fresh( clock_time );                                              /* 刷新时间 */
	Clock_Initial( clock_time );                                            /* 时钟初始化 */

	/* 中断初始化 */
	EA	= 1;    /* 开总中断 */
	ET0	= 1;    /* Timer0 开中断 */
	ET2	= 1;    /* Timer2 开中断 */
	TMOD	= 0x01; /* Timer0 工作方式 1 */
	RCAP2H	= 0x3c;
	RCAP2L	= 0xb0; /* Timer2 延时 50 ms */
}

Εμφάνιση ώρας και ενημέρωση

Το σύστημα ανανεώνει συνεχώς τον χρόνο στον κύριο βρόχο και τον εμφανίζει μέσω της οθόνης LCD. Ταυτόχρονα, η τιμή θερμοκρασίας διαβάζεται μέσω του αισθητήρα DS18B20 και εμφανίζεται στην οθόνη LCD.

while ( 1 )
{
	Clock_Fresh( clock_time );      /* 时间刷新 */
	Lcd_Clock( clock_time );        /* 时间显示 */

	Sensor_Fresh( temperature );    /* 温度更新 */
	Lcd_Temperture( temperature );  /* 温度显示 */

	/* 整点报时 */
	if ( (*clock_time == 0x59)