学习日志                        姓名 :刘易中           日期 :2018/7/20

今日学习任务

编写一个基于单片机的数字时钟,并用6位数码管显示,且可以调节时分秒

今日任务完成情况

完成编写

今日开发中出现的问题汇总

有一些变量数组定义有误

对于延时时长的把控

今日未解决问题

6位数码管一直有些闪烁,秒表跳得略慢

今日开发收获

怎样显示6位数码管

自我评价

自己独立编写程序还是有困难,上网参考了很多程序自己整合了一下基本完成了任务,但很多细节或者深入的问题还是不太清楚。

其他

sbit SEG1 = P0^0;      //显示1
sbit SEG2 = P0^1;   //显示2
sbit SEG3 = P0^2;     //显示3
sbit SEG4 = P0^3;      //显示4
sbit SEG5 = P0^4;   //显示5
sbit SEG6 = P0^5;     //显示6

sbit DUAN=P2^6;
sbit WEI=P2^7;
unsigned char code tab[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极数码管
uchar Display_Digit[20];
unsigned int  count;//秒计时
//-------时间--------------
uchar shi=0,fen=0,miao=0;// 时分秒
//-------时间--------------
uchar  set;

uchar  flag;          //模式 0 1 2 3

void delay(uint z)     
{
    uint x,y;
    for(x=z;x>0;x--)
    for(y=65;y>0;y--);
}

void DIS_SEG(void)    
{
      Display_Digit[0]=shi%100/10;   //时
      Display_Digit[1]=shi%10;       //时
       Display_Digit[2]=fen%100/10;     //分
      Display_Digit[3]=fen%10;         //分
      Display_Digit[4]=miao%100/10;     //秒
      Display_Digit[5]=miao%10;         //秒
              
              DUAN=1;
            P0=tab[Display_Digit[0]];   // 数码管显示负数 或正的百位
            DUAN=0;
        
            delay(1);
            WEI=1;
            P0=0xfe;         //片选数码管    
            delay(3);    
            P0=0xff;         //关闭数码管
            WEI=0;

DUAN=1;
            P0=tab[Display_Digit[1]]+0x80;    //十位    
             DUAN=0;

delay(1);
            WEI=1;
            P0=0xfd;             
            delay(3);   
            P0=0xff;     
            WEI=0;

DUAN=1;
            P0=tab[Display_Digit[2]]; //个位和小数点
            DUAN=0;
            delay(1);

WEI=1;
            P0=0xfb;            
            delay(3);   
            P0=0xff;     
            WEI=0;

DUAN=1;
            P0=tab[Display_Digit[3]]+0x80;  //小数位
            DUAN=0;
            delay(1);
            WEI=1;
            P0=0xf7;             
            delay(3);  
            P0=0xff;     
            WEI=0;

DUAN=1;
            P0=tab[Display_Digit[4]];  
            DUAN=0;
            delay(1);
            WEI=1;
            P0=0xEF;         
            delay(3);    
            P0=0xff;     
            WEI=0;

DUAN=1;
            P0=tab[Display_Digit[5]];   
            DUAN=0;
            delay(1);
            WEI=1;
            P0=0xDF;
            delay(3);   
            P0=0xff;         
            WEI=0;

}

void S2_ADD(void)

    if(flag==1)  
    {
         shi++; 
        if(shi>23)
        {
        shi=23;
        }    //最大值23
    }
    if(flag==2)   //
    {
         fen++; 
        if(fen>59)
        {
        fen=59;
        }    //最大值59
    }
    if(flag==3)
    {   
         miao++;
         if(miao>59)
         {
         miao=59;
         }  //最大值59
    }

}
void S3_SUB(void)
{     if(flag==1)   
    {
         if(shi<1)
        {
        shi=1;
        }
        shi--;      //最小减到0
    }
    if(flag==2)   
    {
         if(fen<1)
        {
        fen=1;
        }
        fen--;      //最小减到0
    }
    if(flag==3)
    {
         if(miao<1)
        {
        miao=1;
        }
        miao--;   //最小减到0
    }
}
void KEY_SCAN(void)           //键盘扫描
{

if(S1==0)//切换 设置
    {    delay(10);   
        if(S1==0)
                {
                    while(!S1)
                    if(set==0)
                    {
                    set=1;TR1=0;EA=0;
                    }
                    else
                    {
                    set=0;
                    TR1=1;
                    EA=1;
                    }//设置时间,退出切换
                }
    }     
        if(S2==0) //加
    {
        delay(10);   //延时去抖动
        S2_ADD();
               //加
         while(!S2){;}
        }  //等待按键释放
    
         if(S3==0)        //减
    {
        delay(10);   //延时去抖动
        S3_SUB();        // 减
        while(!S3){;}    //等待按键释放
    }
    if(S4==0)//切换 设置
    {
        delay(10);   
                if(S4==0)
                {    flag++;
                    TR1=0;
                    EA=0;
                    if(flag>3)
                    {
                    flag=1;
                    }     //在 1 2 3中切换
                    while(!S4){;}
                }
        }     
}

//--------------key---------------------------------------
int main()
{  
    P0=0;

TMOD=0x10;    //定时器1方式2
    TH1=(65536-50000)/256;
    TL1=(65536-50000)%256;    
    EA=1;        //开总中断
    ET1=1;        //开定时器1中断
    TR1=1;         //开启定时器,

while(1)
    {
    KEY_SCAN();//键盘扫描
    DIS_SEG(); //数码管显示
    }
    return 0;

}
//定时器1
void timer1_() interrupt 3
{  
    TH1=(65536-50000)/256;
    TL1=(65536-50000)%256;
    count++;
    if(count>20)
        {
            count=0;
            miao++;
            if(miao==60)        //秒
            {
                miao=0;
                fen++;
                if(fen==60)     //分
                {
                    fen=0;
                    shi++;
                    if(shi==24) //时
                    {
                        shi=0;
                    }  
                }
            }
    }
}

苏嵌学习日志12 07.20相关推荐

  1. 苏嵌学习日志08 07.16

    学习日志 刘易中 07.16 今日学习任务 C51单片机的基本常识.LED灯.蜂鸣器.普通按键.矩阵按键 今日任务完成情况 复习了C51单片机的理论知识,介绍了LED灯.蜂鸣器.按键的简单编程和仿真 ...

  2. 苏嵌学习日志03 07.13

    学习日志      姓名:刘易中      日期:2018/07/13 今日学习任务 结构体.结构体和链表.内存管理.关键字union.enum.typedef等.   今日任务完成情况 (详细说明本 ...

  3. 苏嵌学习日志06 07.14

    本文参考自: 原文地址 姓名:刘易中         日期:7.14 1. 题目:通过编程实现,统计1~n有多少个9 提示:n通过参数传入 #include<stdio.h> int ma ...

  4. Python学习日志12 - 办公自动化

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 前言 进入正题 Python学习日志12课 - 办公自动 ...

  5. 苏嵌//张朋//2018.07.13

    苏嵌                                                                                                   ...

  6. 苏嵌//张朋//2018.07.23

    苏嵌                                                                                                   ...

  7. //苏嵌//张朋//2018.07.11

    苏嵌                                                                                                   ...

  8. 苏嵌//张朋//2018.07.16

    苏嵌                                                                                                   ...

  9. 分享Silverlight/WPF/Windows Phone一周学习导读(12月20日-12月26日)

    上周圣诞节,Silverlight社区有些冷清,没有太多新鲜的事情.总结上周的Silverlight,WPF和Windows Phone的学习文章. 本周Silverlight学习资源更新: 解决Si ...

最新文章

  1. 可视化生信分析利器 Galaxy 之 Docker 开发
  2. java公寓管理系统设计与实现_学生公寓(宿舍)管理系统的设计与实现(论文范文, jspjava).docx_蚂蚁文库...
  3. 暂停停止继续播放 0201 winform
  4. 【转】Java和C++的区别有哪些?
  5. RecycleView的网格样式
  6. Golang--defer的mi魂汤
  7. 没有算法资源,产品经理如何从0到1搭建推荐系统?
  8. 【Java方法】从方法中返回多个值
  9. vim的ex模式介绍
  10. 分数加减乘除混合运算带答案_分数加减乘除混合运算专项训练
  11. c语言中char ch和getchar()是什么意思?
  12. YOLOv3网络结构细致解析
  13. 深圳夫妻随迁入户办理详解
  14. 梦幻西游唯美版3D模型展示
  15. pandas美国人口分析实例
  16. 寒冬,是修炼内功的最好机会
  17. 微信小程序-云函数获取用户openid
  18. ROCm 5.4.3 在 ubuntu 20.04 上安装并运行示例
  19. 有关1793年中英第一次正式接触的几本书
  20. 网神防火墙证书失效处理步骤

热门文章

  1. 国产化半实物仿真测试工具——Etest
  2. JavaScript中的参数传递
  3. Android高工:细说 Android 多线程,211本硕如何通过字节跳动、百度、美团Android面试
  4. pip:ffi.h: No such file or directory“
  5. 腾讯音乐 知乎 微信公众账户 搜狗
  6. 轩辕Linux开放实验室
  7. [转]多媒体封装格式详解---MP4
  8. pr值高的域名对网站有什么价值?
  9. F(w)的模是偶函数,相位角是奇函数
  10. 假设一个录像厅有0,1,2三种不同的录像片可由观众选择放映。录像厅的放映规则为: 1)任何时刻最多只能放映一种录像片,正在放映的录像片是自动循环放映的。最后一个观众主动离开时结束当前录像片的放映。