• MCU 51-2 LED and Digital tube Test


    点亮LED实验:

    #include <reg52.h>
    sbit LED1 = P1^0;
    sbit LED2 = P1^1;
    sbit LED8 = P1^7;
    void main()
    {
        LED1 = 0;
        LED2 = 0;
        LED8 = 0;
        while(1);    
    }

    流水:

    #include <reg52.h>
    #include <intrins.h>
    #define uchar unsigned char
    #define uint  unsigned int
    
    //How to use the header file intrins.h 
    //_crol_ 字符循环左移
    //_cror_ 字符循环右移
    //_nop_ 空操作8051 NOP 指令
    //LED = _crol_(LED,1)执行一次后的结果为0x1111 1101
    sbit LED1 = P1^0; uchar i; uchar temp; void delay(uint z) { uint x,y; for(x = z; x > 0; x--) for(y = 120; y > 0 ; y--); } void main() { temp = 0x7f;// 0111 1111 P1 = temp; while(1) { for(i = 0; i < 8; i++) { temp = _cror_(temp,1);//循环右移 P1 = temp; delay(1000); } } }

    数码管静态显示:

    LED显示器工作方式:静态显示与动态显示

    静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。

    动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

    数码管外部结构:

    数码管内部结构:

     

    74HC573真值表:

    #include <reg52.h>
    #include <intrins.h>
    #define uchar unsigned char
    #define uint  unsigned int
    sbit we = P2^7;//位选
    sbit du = P2^6;//段选
    
    //共阴极 uchar code leddata[]
    ={ 0x3F, //"0" 0x06, //"1" 0x5B, //"2" 0x4F, //"3" 0x66, //"4" 0x6D, //"5" 0x7D, //"6" 0x07, //"7" 0x7F, //"8" 0x6F, //"9" 0x77, //"A" 0x7C, //"B" 0x39, //"C" 0x5E, //"D" 0x79, //"E" 0x71, //"F" 0x76, //"H" 0x38, //"L" 0x37, //"n" 0x3E, //"u" 0x73, //"P" 0x5C, //"o" 0x40, //"-" 0x00, //熄灭 0x00 //自定义 }; void delay(uint z) { uint x,y; for(x = z; x > 0; x--) for(y = 114; y > 0 ; y--); } void main() {
    //将要显示的数值锁存在锁存器中 du
    = 1; //打开段选 P0 = leddata[1]; du = 0; //关闭段选 //delay(5); //位选 we = 1;//打开位选 P0 = 0;//8位全部静态显示 we = 0; //关闭位选 while(1); }

    uchar aa[5];
    uchar code bb[5];
    在以上语句中,数组aa[5]中的内容是存放在数据存储区(RAM)中的,在程序运行工程中各个数组元素的值可以被修改,掉电后aa[5]中的数据无法保存。
    而数组bb[5]中的内容是存放在程序存储区(如flash)中的,只有在烧写程序时,才能改变bb[5]中的各元素的值,在程序运行工程中无法修改,并且掉电后bb[5]中的数据不消失。

    数码管动态显示:

    /*数码管循环显示0-9间隔500毫秒*/
    #include <reg52.h>
    #include <intrins.h>
    #define uchar unsigned char
    #define uint  unsigned int
    sbit we = P2^7;
    sbit du = P2^6;
    
    uchar code leddata[]={ 
     
                    0x3F,  //"0"
                    0x06,  //"1"
                    0x5B,  //"2"
                    0x4F,  //"3"
                    0x66,  //"4"
                    0x6D,  //"5"
                    0x7D,  //"6"
                    0x07,  //"7"
                    0x7F,  //"8"
                    0x6F,  //"9"
                    0x77,  //"A"
                    0x7C,  //"B"
                    0x39,  //"C"
                    0x5E,  //"D"
                    0x79,  //"E"
                    0x71,  //"F"
                    0x76,  //"H"
                    0x38,  //"L"
                    0x37,  //"n"
                    0x3E,  //"u"
                    0x73,  //"P"
                    0x5C,  //"o"
                    0x40,  //"-"
                    0x00,  //熄灭
                    0x00  //自定义
                    
                             };
    
    void delay(uint z)
    {
        uint x,y;
        for(x = z; x > 0; x--)
            for(y = 114; y > 0 ; y--);
    }
    
    void main()
    {
                    
            while(1)
            {
                we = 1;//打开位选
                P0 = 0xfe;//1111 1110 只选通第一位数码管
                we = 0;    //关闭位选
    
                du = 1;    //打开段选
                P0 = leddata[1];
                du = 0;    //关闭段选
                delay(5);//延时5毫秒
                
                we = 1;    //打开位选
                P0 = 0xfd;//1111 1101  只选通第二位数码管
                we = 0;    //关闭位选
                
                du = 1;//打开段选
                P0 = leddata[2]; //显示2
                du = 0;    //关闭段选
                delay(5);//延时5毫秒    
            }
    }
    //人眼的视觉停留效果,使人误以为两个同时亮

  • 相关阅读:
    索引跳跃式扫描(INDEX SKIP SCAN)
    Oracle参数Arraysize设置对于逻辑读的影响分析
    Oracle的SQL优化思路
    通过SID查找历史执行的SQL语句
    expdp/impdp数据泵分区表导入太慢了。添加不检查元数据参数提高效率:ACCESS_METHOD=DIRECT_PATH
    Oracle不能并行直接添加主键的方法:先建唯一索引后建主键
    ORA-20011 问题处理
    安装grid时找不到ASM共享磁盘
    jmeter-测试计划
    jmeter解压后启动jmeter.bat报错:Not able to find java executable or version
  • 原文地址:https://www.cnblogs.com/darren-pty/p/13282972.html
Copyright © 2020-2023  润新知