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

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的智能呼叫医护系统设计与实现
下一篇:没有了

STC89C52单片机的作息时间控制器的设计+电路图

STC89C51单片机简易数字电压表的设计+电路图

STC89C52单片机技术的红外遥...

STC89C52单片机的烟雾检测报...

STC89C51单片机的温度控制系统设计

AT89C51单片机智能家居安防...

STC89C51单片机路灯控制器系统设计

气质类型对排球运动员战...

大学生社交软件使用情况和睡眠质量现状研究

株洲市小微企业文化建设路径【3502字】

巨蟹座和什么星座配對指...

石墨烯/氮化碳复合物水凝...

企业财务报告模式国内外研究现状综述

生育保险金额核定,生育...

农产品出口制约因素及预...

花椒风味物质的高效提取工艺优化

乡镇农业服务体系面临的...