美文网首页
单片机基础一 2020/3/17

单片机基础一 2020/3/17

作者: LH大牛 | 来源:发表于2020-03-17 18:05 被阅读0次

    1.最小单片机系统:晶振,电源,复位电路
    2.点亮led灯:

    #include<reg51.h>
    sbit LED =P2^0;//声明引脚,P是大写
    void main()
    {
          LED=0;//引脚输出低电平
          while(1);//程序停止在这里
    }
    

    3.led流水灯左右移程序

    #include<reg51.h>
    #include<intrins.h>
    #define led P2
    
    void delay (int i)
    {
        while(i--); 
    }
    int main()
    {
        int count=0,i=0;
        while(1)
        {
            for(i=0;i<=16;i++)
            {
                if(i<=8)
                {
                    led=(0xfe<<count);//11111110=fe
                    delay(5000); 
                    count++;
                    if(count>=8)
                    {
                        count=0;
                    }
                }
                else
                {
                    led=(0x7f>>count);//11101111=7f
                    delay(5000);
                    count++;
                    if(count>=8)
                    {
                        count=0;
                        i=0;
                    }
                }
            }
        }
        return 0;
    }
    

    移位运算:右移左补0,左移右补0;
    例如:1111 1110 ——左移1位:1111 1100
    右移1为:0111 1111
    3.定时器
    Ⅰ.时钟周期:时钟周期是时序中的最小单位,时钟周期=1/时钟源频率(晶振频率)
    Ⅱ.机器周期:机器周期是指完成一条指令的时间,机器周期=12x时钟周期
    Ⅲ.定时器寄存器
    定时器:T0,T1
    TCON:定时器控制寄存器


    tcon.PNG
    tcon控制寄存器描述

    注意:当只要能够有硬件置1或者清0的,单片机可自动完成; 只有软件清0的,只能用程序完成;
    TMOD -定时器寄存器模式的位分配


    TMOD -定时器寄存器模式的位分配
    TMOD寄存器描述
    TMOD寄存器描述
    TMOD寄存器工作模式
    TMOD寄存器工作模式
    注意:TCON可以直接位寻址,TMOD不可以直接位寻址;
    例子:TR1=1;允许操作
    M1=1; 不允许操作
    定时器模式1电路示意图
    定时器模式1电路示意图

    使用定时器步骤:
    1.设置TMOD,配置好工作模式
    2.设置计数寄存器 TH0和TL0初值;
    3.设置TCON,通过TR0=1来让定时器计数;
    4.判断TCON寄存器TF0位,检测定时器溢出情况;

    定时器初值设置:(以晶振12M为例)
    时钟周期=1/1200 0000;机器周期=12x时钟周期=12/120 0000=0.000001 s
    定时20ms=0.02s
    s(机器周期个数)x 机器周期 = 0.02s
    s=0.02/0.000001 =20,000次
    16位定时器的终值=2^16=65536
    经过20000后,到达终值65536,那么初值65536-20000=45536;
    45536的16进制为:B1E0;
    所以高8位THn=0xB1,低8位:TLn=0xE0;

    程序:使用定时器点亮流水灯

    #include<reg51.h>
    #define LED P2
    int main()
    {
            unsigned int count=0;
            unsigned int i=0;//必须写道定时器设置前面 DSQ.C(10): error C141: syntax error near 'unsigned'
            TMOD=0x01;  //1.设定计数器工作模式
            TH0=0xB1;   //2.给定初值
            TL0=0xE0;
            TR0=1;      //3.打开计时器
            
            while(1)
            {
                if(TF0==1)
                {
                    TF0=0;
                    TH0=0xB1;
                    TL0=0xE0;
                    i++;
                }
                if(i>=50) //定时1s
                {
                    if(count<8)
                    {
                        i=0;
                        LED=(0xfe<<count);
                        count++;
                    }
                    else
                    {
                        count=0;
                    }
                }
            }
            return 0;
    }
    

    4.数码管


    数码管
    #include<reg51.h>
    #define nu P0
    
    sbit LSA=P2^2;//不能直接赋值,赋值必须用sbit进行位限制
    sbit LSB=P2^3;
    sbit LSC=P2^4;
    int ch[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
    //共阴极
    void delay(int i)
    {
        while(i--);
    }
    
    int main()
    {
        int i=0;
        LSA=0;
        LSB=0;
        LSC=0;
        while(1)
        {   for(i=0;i<=16;i++)
            {
                nu=ch[i];
                delay(50000);
            }
            i=0;
        }
    }
    
    
    
          
    
    
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:单片机基础一 2020/3/17

          本文链接:https://www.haomeiwen.com/subject/eqcxyhtx.html