2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Cette expérience vise à concevoir et à mettre en œuvre un système de calendrier perpétuel basé sur l'affichage LCD12864 du microcontrôleur STC89C52, et à intégrer un capteur de température pour réaliser la fonction de surveillance de la température. Le système dispose d'un carillon horaire et d'une fonction d'alarme, ainsi que d'un signal sonore. Cette conception peut non seulement réaliser un affichage de base de l'horloge et de la température, mais dispose également de certaines fonctions d'alarme, ce qui la rend adaptée aux scénarios de maison ou de bureau.
Le circuit est principalement composé d'un microcontrôleur, d'un écran LCD, d'un capteur de température et d'un buzzer. L'écran d'affichage LCD12864 est connecté au microcontrôleur via une interface parallèle, le capteur de température DS18B20 est connecté au microcontrôleur via une interface monofilaire et le buzzer est contrôlé via le port e/s du microcontrôleur.
Une fois le système mis sous tension, il est d'abord initialisé, y compris l'initialisation de l'écran LCD, l'initialisation de l'horloge, l'initialisation des interruptions, etc. Le code d'initialisation est le suivant :
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 */
}
Le système actualise en permanence l'heure dans la boucle principale et l'affiche via l'écran LCD. En même temps, la valeur de température est lue via le capteur DS18B20 et affichée sur l'écran LCD.
while ( 1 )
{
Clock_Fresh( clock_time ); /* 时间刷新 */
Lcd_Clock( clock_time ); /* 时间显示 */
Sensor_Fresh( temperature ); /* 温度更新 */
Lcd_Temperture( temperature ); /* 温度显示 */
/* 整点报时 */
if ( (*clock_time == 0x59)