zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155320 嵌入式C语言——时钟

    2017-2018-1 20155320 嵌入式C语言——时钟

    要求:

    在作业本上完成附图作业,要认真看题目要求。

    提交作业截图

    作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清零)

    image

    课上提交的答案:

    image

    • 错误原因:没有正确理解PPT上的相关知识,只是照搬PPT上的内容

    • PPT上的范例是以分钟为例,通过移位和与运算得到所需的位,需要注意位数以及与的值的变化。

    提取分钟:

    设置分钟:

    • 关于通过位运算置位的总结如下:
    |0 取得原来值
    |1 全置为1
    &0 全置为0
    &1 取得原来值
    
    • 此题的正确答案为

    因为hours所占的位置为11—15,所以需要先右移11位,又因为hours占5位,所以需要与上0x1F

    提取小时:

    #define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000
    #define TIME *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中
    int getHours() 
    {
    int time=TIME;
    return (time>>11)&0x1F;
    }
    

    设置小时:

    #define TIME_Addr  0xFFFFC0000
    #define TIME *(volatile int *) (TIME_Addr+2)//这里需要将地址+2
    
    void SetHours(int hours)
    {
        int oldtime = TIME;
        int newtime = oldtime & ~ (0x1F << 11);//将小时清零,保留分钟与秒钟
        newtime |= (hours & 0x1F) << 11;//设置小时时间
        TIME = newtime;
    }
    
    int getHours()
    {
        int time = TIME;
        return (time>>11) & 0x1F;
    }
    

    课下扩展

    • 关于对秒的提取与设置

    因为秒的位置在0—4位,所以不需要进行移位操作即可,直接与上0x1F

    提取秒:

    #define TIME_Addr  0xFFFFC0000
    #define TIME *(volatile int *) (TIME_Addr+2)//这里需要将地址+2
    
    int getSeconds()
    {
        int time = TIME;
        return time & 0x1F;
    }
    

    设置秒:

    #define TIME_Addr  0xFFFFC0000
    #define TIME *(volatile int *) (TIME_Addr+2)//这里需要将地址+2
    
    void SetSeconds(int seconds)
    {
        int oldtime = TIME;
        int newtime = oldtime & ~ 0x1F;
        newtime |= seconds & 0x1F;
        TIME = newtime;
    }
    
    
    
  • 相关阅读:
    HDOJ2066 一个人的旅行 floyd
    手动添加数据源时DataGridViewComboBoxCell值出问题解决方法
    可伸缩的Form窗体!
    SharpMap项目Web控件学习!
    MVC和MVP的初步理解
    ArcEngine编辑功能(五)
    胡言乱语:实体具有继承关系的空间数据库设计方法?
    WinForm单例窗体的实现
    4. 模板模式和建造者模式
    Oracle笔记(0):在Win2008系统上安装Oracle11g实践
  • 原文地址:https://www.cnblogs.com/ljq1997/p/8196722.html
Copyright © 2011-2022 走看看