⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机c语言程序设计100例--基于PIC+PROTEUS
💻 C
字号:
//-----------------------------------------------------------------
//  名称: 用PCF8583与高仿真组件设计的可调式数码管电子时钟
//-----------------------------------------------------------------
//  说明: 本例在Proteus中选用了高度仿真的电子钟元器件,并添加了
//        时分调整功能,冒号闪烁显示,AM/PM切换,12/24小时制选择等.
//                           
//-----------------------------------------------------------------
#include <pic.h>
#include <stdio.h>
#include "PCF8583.h"
//分别保存:1/100秒,秒,分,时,前者为BCD,后者为DEC
extern INT8U RTC_DATA[4], DateTime[4];
//时钟设置开关及按键  
#define S1_ON()   (RB0 == 0)   //设置
#define K2_DOWN() (RB1 == 0)   //12/24小时
#define K3_DOWN() (RB2 == 0)   //小时加
#define K4_DOWN() (RB3 == 0)   //分钟加
//时钟指示组件控制引脚定义(不要误定义为1,2,3,4)
#define CLK_AM_PM    0         //AM/PM切换
#define CLK_12_24    1         //12/24小时制切换
#define CLK_SET      2         //SET指示切换
#define CLK_COL      3         //冒号显示切换
//3-8译码器使能控制引脚定义(RD3)
#define E1_74LS138   3
//时分秒显示缓冲(各占两位,共6字节),
//第7个字节0x00控制(AM/PM),(12/24),(SET)及":"显示.
//该字节低四位的对应关系是XXXX-0(:)0(AM/PM)0(12/24)0(SET)
//这与上述的四个#define对应.0x00默认设置AM,12,非SET
INT8U disp_Buffer[] = {0,0,0,0,0,0,0x00};
//本例函数声明
void Refresh_Disp_Buffer();       //刷新显示缓冲
void Display_Time();              //显示时钟
void Adjust_and_Set_Clock();      //调节与设置时钟
//-----------------------------------------------------------------
// 根据当前时间刷新时分秒显示缓冲
//-----------------------------------------------------------------
void Refresh_Disp_Buffer()
{


}

//-----------------------------------------------------------------
// 显示时间 
//-----------------------------------------------------------------
void Display_Time()
{
    INT8U i;
    //循环显示时钟显示屏的7位数据,前6个是时/分/秒,各两位
    //最后一字节用于控制指示屏及":"开关
    for (i = 0; i < 7; i++)
    {  




    } 
}

//-----------------------------------------------------------------
// 处理12/24小时制按键切换后的数据变更及AM/PM显示开关
//-----------------------------------------------------------------
void Handle_12_24_and_AM_PM_Switch()
{
    //处理24小时制下的数据变更等问题---------------------------------
    if ( disp_Buffer[6] & (1<<CLK_12_24) )
    {
       

    }
    else //处理12小时制下的数据变更及AM/PM开关问题------------------
    {
       

    } 
}

//-----------------------------------------------------------------
// 时钟调整与设置
//-----------------------------------------------------------------
void Adjust_and_Set_Clock()
{
    INT8U Changed_Flag = 0;            //时间调节改变标志
    disp_Buffer[6] |=  (1<<CLK_SET);   //点亮"SET"标志
    while (S1_ON()) //K1未释放时保持设置状态
    {   if (K2_DOWN()) //设置12/24小时制----------------------------
        {   

        }        
        if (K3_DOWN()) //加小时-------------------------------------
        {   


        }        
        if (K4_DOWN()) //加分钟-------------------------------------
        {   


        }
        //刷新显示缓冲并显示当前时钟 --------------------------------
        Refresh_Disp_Buffer(); Display_Time();
    }
    if (Changed_Flag)                   //如果有调节操作则写入PCF8583
    {   



    }
    disp_Buffer[6] &= ~(1<<CLK_SET);       //关闭"SET"标志,恢复正常运行状态
}

//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main() 
{
    ADCON1 = 6;                         //RA端口设为数字端口
    TRISB = 0xFF; RBPU = 0;             //调节按键/开关输入,内部上拉
    TRISD = 0x00;                       //数码管显示输出端口
    I2C_Init();                         //初始化I2C  






}

//----------------------------------------------------------------
// TMR0溢出中断控制时钟运行
//----------------------------------------------------------------
void interrupt Clock_Run_Control() 
{       
   if (T0IF)
   {   


   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -