电子万年历需要具有现实年、月、日、时、分、秒的功能,并且因断电或其它因素引起时间误差时能对时间进行校正,同时要求具有闹钟功能和显示环境温度的功能。

3。3  用户需求来自优I尔Q论T文D网WWw.YoueRw.com 加QQ7520~18766

 用户给电子万年历单片机上电后就会在LCD屏幕上显示出时间信息和温度信息,初始的时间信息为系统设置的默认值。用户需要根据实际的时间进行修改。

单片机共有4个按键,按键key1为修改时间模式,key3、key4对时间进行加减;

按键key2为修改闹钟模式,key3、key4对闹钟时间进行加减。

4  系统功能介绍

采用裸机程序,while循环结构:

   

图4。1系统运行流程图

4。1  功能简介

(1)程序入口:实现所有硬件的配置,以及初始化。

(2)屏幕显示:硬件配置初始化完成后进入循环,直接显示时间温度信息。

(3)按键扫描:对每一个键值进行判断,是否有按键按下。

(4)逻辑判断:如果有按键按下进入对应子程序,进行对应操作。

(5)闹钟判断:判断是否设置闹钟,如果设置了闹钟,则进行时间匹配,如果匹配完成,则进行一分钟响铃

(6)屏幕显示:更新显示时间、温度。

4。2硬件配置以及初始化模块

硬件初始化模块包含了按键初始化模块、IIC初始化模块、LCD初始化模块、

PCF8583初始化模块,DS18B20温度采集初始化模块。

4。3硬件初始化

//按键配置和初始化

sbit key1=P1^4;

sbit key2=P1^5;

sbit key3=P1^6;

sbit key4=P1^7;

char get_key(void)

{

   if(key1==0)

{

   return 1;

}

else if(key2==0)

{

   return 2;

}

else if(key3==0)

{

   return 3;

}

else if(key4==0)

   {

return 4;

   }

else return 0;

}

char key_scan(void )//按键消抖模块,供实际硬件操作使用

{

char key_retur1=0,key_retur2=0;

if(get_key())

{

key_retur1=get_key();

delay_ms(15);

if(get_key())

{

key_retur2=get_key();

}

}

if(key_retur1==key_retur2)

return key_retur1;

}

//lcd配置和初始化

sbit RS=P2^0;

sbit RW=P2^1;

sbit E=P2^2;

void delay_us(uint t)   //延时约10t us

{

    while(t--);

}

void delay_ms(uint x)

{

    uint i;

    while(x--)

    {

        for(i=0;i<120;i++) ;

    }

   

}

void busy_wait()

{

    uchar busy;

    do

    {

        P0=0xff;

        E=0;

        RS=0;

        RW=1;

        delay_us(5);

        E=1;

        busy=P0;

        E=0;

    }while(busy & 0x80);

}

void write_command(uchar cmd)

{

    busy_wait();

    RS=0;

    RW=0;

上一篇:基于ZigBee的智能呼叫医护系统设计与实现
下一篇:AT89C51单片机多功能数字钟设计+电路图+程序

基于51单片机自动门智能控制系统设计

STC89C52单片机智能温度监测系统设计

STC89C52单片机盲人用时钟的设计+电路图+程序

粉料称重装置的单片机控...

基于TI-DSP平台的电力电子测控平台设计

STM32单片机的无刷直流电机控制系统设计

AT89S52单片机车内空气检测系统设计+源代码

提高小學语文課堂朗读教...

小型通用机器人控制系统设计任务书

从企业eHR建设谈管理信息...

MNL模型历史城区居民活动...

大规模MIMO系统的发展研究现状

浅析施工企业保理融资成...

PCI+PID算法直流力矩电机速...

《水浒传》中血腥暴力研...

遥感土地用变化监测国内外研究现状

高效课堂教师问卷调查表