蓝桥杯单片机知识汇总(更新中)

蓝桥杯知识汇总

1.数码管

  • 段码显示
    uchar code display[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xbf, 0xff};
  • 打开或关闭数码管
    P2 = (P2 & 0x1f) | 0xc0;
    P0 = order[cnt];
    P2 &= 0x1f;
    
    P2 = (P2 & 0x1f) | 0xe0;
    P0 = display[disbuf[cnt]];
    P2 &= 0x1f;

2.LED显示

P2 = (P2 & 0x1f) | 0x80;
P0 = 0xfe;
P2 &= 0x1f;

3.系统初始化

  • 关闭外设
    P2 = ((P2 & 0x1f) | 0xa0);      //关闭全部外设
    P0 = 0x00;
    P2 &= 0x1f;
    
    P2 = (P2 & 0x1f) | 0xe0;        //数码管都不显示
    P0 = 0xff;
    P2 &= 0x1f;
  • 定时器设置
    TMOD = 0x01;                   //计时器0,采用方式1
    TH0 = (65536 - 2000) / 256;    //定时2ms
    TL0 = (65536 - 2000) % 256;
    
    EA = 1;                        //打开总中断
    ET0 = 1;                       //定时器中断0打开
    TR0 = 1;                       //开始计数
  • 串口通信设置
    SCON = 0x50;    //工作方式1
    AUXR = 0x40;
    TMOD = 0x20;
    
    TH1 = 256 - (11059200 / 2400 / 32);    //波特率为2400
    TL1 = 256 - (11059200 / 2400 / 32);
    
    EA = 1;         //打开总中断
    ES = 1;         //打开串口中断
    TR1 = 1;        //打开计时器1

4.IIC

#define SlaveAddrW 0x90
#define SlaveAddrR 0x91
#define EEPROMW    0xa0
#define EEPROMR    0xa1

5.DS1302

  • 命令字
    #define AM(X)            X
    #define PM(X)           (X + 12)
    #define DS1302_SECOND    0x80
    #define DS1302_MINUTE    0x82
    #define DS1302_HOUR      0x84
    #define DS1302_DAY       0x86
    #define DS1302_MONTH     0x88
    #define DS1302_WEEK      0x8A
    #define DS1302_YEAR      0x8C
    #define DS1302_RAM(X)   (0xC0 + (X) * 2)
  • 函数操作
    //是否写保护
    void DS1302_SetProtect(bit flag){
        if (flag)
            Write_Ds1302(0x8e, 0x80);
        else
            Write_Ds1302(0x8e, 0x00);
    } 
    
    //设置时间
    void DS1302_SetTime(unsigned char Address, unsigned char Value){
        DS1302_SetProtect(0);
        Write_Ds1302(Address, ((Value / 10) << 4) | (Value % 10));     //将十进制数转换成BCD码
    }
    
    //转化时间格式
    void DS1302_GetTime(SYSTEMTIME *Time){
        unsigned char ReadValue;
    
        /* 将BCD码转换成十进制数 */
        ReadValue = Read_Ds1302(DS1302_MINUTE | 0x01);
        Time->minute = ((ReadValue & 0x70)>>4) * 10 + (ReadValue & 0x0f);
    
        ReadValue = Read_Ds1302(DS1302_HOUR | 0x01);
        Time->hour = ((ReadValue & 0x70)>>4) * 10 + (ReadValue & 0x0f);
    }
    
    //时间初始化
    void Time_Initial(){
        unsigned char Second;
    
        DS1302_SetTime(DS1302_HOUR, 8);
        DS1302_SetTime(DS1302_MINUTE, 30);
        DS1302_SetTime(DS1302_SECOND, 0);
    
        Second = Read_Ds1302(DS1302_SECOND | 0x01);
        if (Second & 0x80){
            DS1302_SetTime(DS1302_SECOND, 0);          //启动时钟
        }
    }

6.A/D

unsigned char Rb2_Read(){
    unsigned char dat;

    IIC_Start();
    IIC_SendByte(0x90);   //写入地址
    IIC_WaitAck();

    IIC_SendByte(0x43);   //0x43是Rb2, 0x41是光敏
    IIC_WaitAck();

    IIC_Start();
    IIC_SendByte(0x91);   //读命令
    IIC_WaitAck();

    dat = IIC_RecByte();  //读取一个字节
    IIC_Ack(0);
    IIC_Stop();

    return dat;
}

7.EEPROM(读取和写入数据都不可中断)

unsigned char Read_EEPROM(unsigned char con){
    unsigned char dat;

    IIC_Start();
    IIC_SendByte(0xa0);   //写入地址
    IIC_WaitAck();

    IIC_SendByte(con);        //从起始位置开始读取
    IIC_WaitAck();

    IIC_Start();
    IIC_SendByte(0xa1);   //读命令
    IIC_WaitAck();

    dat = IIC_RecByte();     //读取一个字节
    IIC_Ack(0);
    IIC_Stop();

    return dat;
}

void Write_EEPROM(unsigned char date, unsigned char con){
    IIC_Start();
    IIC_SendByte(0xa0);
    IIC_WaitAck();

    IIC_SendByte(con);
    IIC_WaitAck();

    IIC_SendByte(date);
    IIC_WaitAck();   

    IIC_Stop();
    Delay(3);                      //写入后要注意延时一段时间
}

8.DS18B20(读取温度不可中断)

  • 延时函数
    //单总线延时函数
    void Delay_OneWire(uint t)
    {
        char  z;
        while(t--)
            for(z = 0; z < 12; z++);
    }
  • 读取温度
    /* 读取数据不可中断,可以采用关闭终端来实现 */
    unsigned int Read_Temperature(){
        unsigned char low,high;
        unsigned int temp;
        float t;
    
        init_ds18b20();          //器件初始化
        Write_DS18B20(0xcc);     //跳过读序列
        Write_DS18B20(0x44);     //启动温度转换
        Delay_OneWire(200);      //延迟一会儿
    
        init_ds18b20();
        Write_DS18B20(0xcc);     //同上
        Write_DS18B20(0xbe);     //读取温度
    
        low = Read_DS18B20();    //读取低位
        high = Read_DS18B20();   //读取高位
    
        temp = (high << 8) | low;
        t = temp * 0.0625;
        temp = t + 0.5; 
    
        return temp;
    }

原文地址:https://www.cnblogs.com/garden6zg/p/8469705.html

时间: 2024-10-21 23:26:06

蓝桥杯单片机知识汇总(更新中)的相关文章

【蓝桥杯单片机10】串行接口的进阶与实战应用

[蓝桥杯单片机10]串行接口的进阶与实战应用 广东职业技术学院 欧浩源 串行接口作为51单片机的重要外设,编程操作并不复杂,但在实际的项目应用中,由于数据结构和通信规约的不同,其程序逻辑也有各种变化,不会像"[蓝桥杯单片机09]串行接口的基本原理与应用"中说的那么简易.      一般情况下,上位机的命令可能不是一个字节,而是多个字节组成的命令帧,有的长度固定,有的长度变化:而且要求返回的数据可能也不是一个字节,可能是一个数组,也有可能是一个字符串等.在蓝桥杯的比赛中,也不可能让你只是

Html2canvas - 项目中遇到的那些坑点汇总(更新中...)

水平居中的元素截图后向左跑偏 明明是水平居中的代码,截图出来的会偏左,结构是左图片右文字,有时候是图片自己跑到最左边,有时候是整体偏左一点点 这个问题也不是经常遇到,场景是父div元素text-align=center;内部两个子元素设为display:inline-block的模式.然后画图就会出现左边的div偏左靠或直接在左边的情况. 问题未解决,出现时也没研究因为啥,等有时间的时候就不出现了... 靠背景图露脸的dom们会有底线 截图时,如果有一个dom元素是用背景图填充的,里边没有任何结

Ubuntu小点汇总,更新中...

转自:http://blog.csdn.net/zxz_tsgx/article/details/39713627 昨天重装了Ubuntu14.04 64位版,又被一些基础操作/设置给搞怕了,以前安装的时候没有记录下来,一段时间后就忘了,然后继续捣鼓一遍,好不烦恼,所以这次就尽量记录下来; 安装输入法 ==!这个整了半天没装成sogou,使用谷歌拼音,当然,首先是打开language support进行更新,并安装Chinese(Simplfied)语言支持(我装的是E文版系统),并选择系统输入

&#8203; Linux 命令汇总 更新中

 Linux 命令汇总  1.保存新建分区信息至 /etc/fstab fstb :echo /dev/xvdb1 /mnt ext3 defaults 0 0 >> /etc/fstab 2.%s/old/new/g 用字符串 new 替换正文中所有出现的字符串 old 3.ssh生产秘钥工具 ssh-keygen -t rsa 默认密码保存文件:./.ssh/authorized_keys 默认生成的 私钥文件为: id_rsa     . 公钥为 id_rsa.pub 4.查找命令 ch

数学公式基础知识(更新中...)

一.概率 1.定义: 对于古典试验中的事件A,它的概率定义为:P(A)=m/n,其中n表示该试验中所有可能出现的基本结果的总数目.m表示事件A包含的试验基本结果数. 由于频率nA/n总是介于0和1之间,从概率的统计定义可知,对任意事件A,皆有0≤P(A)≤1,P(Ω)=1,P(Φ)=0.其中Ω.Φ分别表示必然事件(在一定条件下必然发生的事件)和不可能事件(在一定条件下必然不发生的事件). 2.满足条件: (1)非负性:对于每一个事件A,有P(A)≥0; (2)规范性:对于必然事件Ω,有P(Ω)=

Mysql 常用汇总 更新中

mysql 密码重置  先停止mysqld # mysqld_safe --skip-grant-tables & # use mysql; # update user set password=password('yes') where user="root";    ---将root密码设置为yes # flush privileges; # exit # ps -ef | grep mysql    //如果发现安全模式还没有关掉需要 kill -9  干掉 # serv

golang 小知识-持续更新中

Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,array/slice,map,chan, func . 相比 Java,Python,Javascript 等引用类型的语言,Golang 拥有类似C语言的指针这个相对古老的特性.但不同于 C 语言,Golang 的指针是单独的类型,而不是 C 语言中的 int 类型,而且也不能对指针做整数运算.从这一点看,Golang 的指针基本就是一种引用

Ztree扩展方法汇总(更新中)

var treeObj = $.fn.zTree.getZTreeObj("tree_div"); //得到ztree对象 1.展开所有节点 treeObj.expandAll(true); 2.设置根节点展开 var treeObj = $.fn.zTree.getZTreeObj("tree_div"); var nodes = treeObj.getNodes(); for (var i = 0; i < nodes.length; i++) { //设

CSS基础知识(更新中)

<meta charset="utf-8"> <link type="text/css" rel="stylesheet" href="样式文件所在链接"> <p class="x"> </p> 类选择器:p.x{};;;;;;h1.x, p.x{};;;;;;.x{} ...................... <p id="x"