2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Αυτό το πείραμα στοχεύει να σχεδιάσει και να εφαρμόσει ένα σύστημα διαρκούς ημερολογίου που βασίζεται στην οθόνη LCD12864 του μικροελεγκτή STC89C52 και να ενσωματώσει έναν αισθητήρα θερμοκρασίας για την υλοποίηση της λειτουργίας παρακολούθησης θερμοκρασίας. Το σύστημα διαθέτει ωριαία λειτουργία κουδουνίσματος και συναγερμού, καθώς και προτροπές μέσω του βομβητή. Αυτός ο σχεδιασμός όχι μόνο μπορεί να πραγματοποιήσει βασική ένδειξη ρολογιού και θερμοκρασίας, αλλά έχει επίσης ορισμένες λειτουργίες συναγερμού, καθιστώντας το κατάλληλο για σενάρια σπιτιού ή γραφείου.
Το κύκλωμα αποτελείται κυρίως από μικροελεγκτή, οθόνη LCD, αισθητήρα θερμοκρασίας και βομβητή. Η οθόνη LCD12864 συνδέεται με τον μικροελεγκτή μέσω παράλληλης διεπαφής, ο αισθητήρας θερμοκρασίας DS18B20 συνδέεται με τον μικροελεγκτή μέσω μιας διασύνδεσης ενός καλωδίου και ο βομβητής ελέγχεται μέσω της θύρας I/O του μικροελεγκτή.
Αφού ενεργοποιηθεί το σύστημα, αρχικοποιείται πρώτα, συμπεριλαμβανομένης της προετοιμασίας της οθόνης 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)