2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
이 실험의 목표는 STC89C52 마이크로 컨트롤러의 LCD12864 디스플레이를 기반으로 하는 영구 달력 시스템을 설계 및 구현하고 온도 센서를 통합하여 온도 모니터링 기능을 구현하는 것입니다. 시스템에는 매시간 차임벨과 알람 기능이 있으며 부저를 통해 알려줍니다. 이 디자인은 기본 시계 및 온도 표시를 실현할 수 있을 뿐만 아니라 특정 알람 기능도 갖추고 있어 가정이나 사무실 시나리오에 적합합니다.
회로는 주로 마이크로 컨트롤러, 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)