久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1921|回復: 1
收起左側

萬年歷數碼管顯示代碼

[復制鏈接]
ID:418957 發表于 2018-12-9 15:43 | 顯示全部樓層 |閱讀模式
#include"main.h"
#include"delay.h"
#include"ds1302.h"

sbit ADD_KEY=P3^1;
sbit SUB_KEY=P3^3;
#define DATA P0   //數碼管顯示口
#define SHOW P2   //數碼管選擇端口

//共陰極數碼管段碼表
uchar code DIS_CODE[]={0x3F,0x06,0x5B,0x4F,
        0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};

        uchar g_save_time;      //需要保存時間標志
        uchar g_has_set;       //修改時間標志
        uchar g_set_flag;      //設定時間標志
       
/******************************
*函數:指定數碼管顯示數據
*參數:_show指定的數碼管
       _data要顯示的數據
****************************/
void display_num(uchar _show,uchar _data)
{
        SHOW=_show;             //數碼管位選
        DATA=DIS_CODE[_data];   //數碼管段選
        delay_ms(1);
}

/*函數:顯示年、月、日、時、分、秒、星期
*參數: str_time 要顯示的時間*/
void show_time(SYSTEM_TIME str_time)
{
        uchar tmp=0;
        static uchar FLASH=10;  //用靜態變量實現閃爍的效果
       
        display_num(0,2);       //年(高2位)
        display_num(1,0);
       
        tmp=str_time.year;
        if(g_set_flag!=1||FLASH==0)
        {
    display_num(2,(tmp/10));
    display_num(3,(tmp%10));               
        }
       
        tmp=str_time.month;
        if(g_set_flag!=2||FLASH==0)
        {
         if(tmp>9)
         {
          display_num(4,(tmp/10));  //月
         }
         display_num(5,(tmp%10));
        }
       
        tmp=str_time.date;
        if(g_set_flag!=3||FLASH==0)
        {
         if(tmp>9)
         {
           display_num(6,(tmp/10));  //日
         }
         display_num(7,(tmp%10));
        }
       
        tmp=str_time.hour;
        if(g_set_flag!=4||FLASH==0)
        {
         if(tmp>9)
         {
           display_num(8,(tmp/10));  //時
         }
         display_num(9,(tmp%10));
        }
       
        tmp=str_time.min;
        if(g_set_flag!=5||FLASH==0)
        {
         if(tmp>9)
         {
          display_num(10,(tmp/10));  //分
         }
         display_num(11,(tmp%10));
        }
       
        tmp=str_time.sec;
        if(g_set_flag!=6||FLASH==0)
        {
         if(tmp>9)
         {
          display_num(12,(tmp/10));  //秒
         }
         display_num(13,(tmp%10));
        }
       
        tmp=str_time.day;
        if(g_set_flag!=7||FLASH==0)
        {
          display_num(14,tmp);    //星期
        }
       
        if(FLASH--==0)
        {
            FLASH=10;
        }
}

/**************************
*函數;掃描鍵盤,修改時間值
*參數:str_time原來的時間
*返回值:str_time修改后的時間
****************************/
SYSTEM_TIME scan_key(SYSTEM_TIME str_time)
{
if(ADD_KEY==0)
{
  g_has_set=1;
         switch(g_set_flag)
         {
                 case 1:
                         str_time.year++;
                 break;
                 case 2:
                         str_time.month++;
                 break;
                 case 3:
                         str_time.date++;
                 break;                 
                 case 4:
                         str_time.hour++;
                 break;                 
                 case 5:
                         str_time.min++;
                 break;                 
                 case 6:
                         str_time.sec++;
                 break;                 
                 case 7:
                         str_time.day++;
                 break;
     default:
                         break;
         }
}

if(SUB_KEY==0)
{
   g_has_set=1;
         switch(g_set_flag)
         {
                 case 1:
                         str_time.year--;
                 break;
                 case 2:
                         str_time.month--;
                 break;
                 case 3:
                         str_time.date--;
                 break;
                 case 4:
                         str_time.hour--;
                 break;
                 case 5:
                         str_time.min--;
                 break;
                 case 6:
                         str_time.sec--;
                 break;
                 case 7:
                         str_time.day--;
                 break;
                 default:
                         break;
         }
}

if(str_time.year>99)
         str_time.year=0;
if(str_time.month>12)
         str_time.month=1;
if(str_time.date>31)
         str_time.date=1;
if(str_time.hour>23)
         str_time.hour=0;
if(str_time.min>59)
         str_time.min=0;
if(str_time.sec>59)
         str_time.sec=0;
if(str_time.day>7)
         str_time.day=1;

return (str_time);
}

/**********************
*函數:外部0中斷,設定鍵中斷響應
*參數:空
***********************/
void int0_inter() interrupt 0
{
        if(g_has_set==0)     //ADD、SUB鍵未按過
        {
         g_set_flag++;       //設定時間標志加1
                if(g_set_flag>7)
                {
                  g_set_flag=1;
                }
        }else
        {
         g_save_time=1;     //ADD、SUB鍵已按過,要保存數據
        }
}

/***************************************
*函數:主函數,從DS1302讀取數據顯示,可修改數據,并將修改后的
*      數據保存到DS1302
*參數:空
****************************************/
void main(void)
{
uchar key_val=0;
        SYSTEM_TIME str_time;
       
        g_save_time=0;    //全局變量初始化
        g_has_set=0;
        g_set_flag=0;
        ds1302_init();    //DS1302端口初始化
       
        IT0=1;            //下降沿觸發
        EX0=1;            //外部中斷打開
  EA=1;             //全局中斷打開
       
        key_val=P3;       //讀取按鍵狀態
        while(1)
        {
          if(g_set_flag==0)
                {
                 str_time=read_time();   //讀取時間
                }
               
                if((g_set_flag!=0)&&(key_val!=P3))  //判斷是否有按鍵按下
                {
                 key_val=P3;     //讀取按鍵狀態
                 str_time=scan_key(str_time);
                }
               
                show_time(str_time);   //顯示時間
               
                if(g_save_time!=0)
                {
                 set_time(str_time);   //修改DS1302的時間
                 g_save_time=0;        //修改標志量
                 g_has_set=0;
                 g_set_flag=0;
                }
        }
}

回復

使用道具 舉報

ID:1 發表于 2018-12-9 23:04 | 顯示全部樓層
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女天天操 | 天天操狠狠操 | 久久久久久色 | 91人人爽| 老司机久久 | 亚洲网站免费看 | 国产成人艳妇aa视频在线 | 欧美www在线观看 | 成人综合视频在线观看 | 毛片免费观看视频 | 婷婷一级片 | 韩国精品一区 | 午夜无码国产理论在线 | 99色在线视频 | 久久网日本 | 狠狠影院 | 久久久青草婷婷精品综合日韩 | 国产成人精品高清久久 | 一级黄色片在线免费观看 | 婷婷久久五月 | 日韩欧美中文字幕在线观看 | 亚欧性视频 | 精品国产乱码久久久久久丨区2区 | 色婷婷一区二区三区四区 | 国产精品日韩欧美一区二区三区 | 亚洲成人自拍 | 亚洲国产高清免费 | 国产xxxx搡xxxxx搡麻豆 | 中文字幕一区在线观看视频 | 婷婷综合色 | 天天躁日日躁xxxxaaaa | 欧美日韩视频在线 | 亚洲免费在线 | 91免费小视频 | 国产精品久久久久久婷婷天堂 | 欧美一区免费 | 亚洲一二三区在线观看 | 孰女乱色一区二区三区 | 国产精品视频网站 | 国产精品久久久久久一区二区三区 | 丁香五月网久久综合 |