• 普中 51 单片机点亮LED灯


    普中 51 单片机 (STC89C52RC) LED / IO

    将LED1进行闪烁操作

    在这里插入图片描述

    为啥要进行延时操作?依据人的肉眼余晖效应, 延时时间不能太短,否则就无法观察到 LED 闪烁

    #include "reg52.h"
    typedef unsigned int u16; //对系统的默认数据类型进行从命名
    
    sbit LED1 = P2^0;
    
    void delay_10us(u16 ten_us){//延时函数 当参数为ten_us =1时大概延时为10us
    	
    	while(ten_us--);
    
    }
    
    void main(){//实现LED1的闪烁功能
    	
    	while(1){
    		LED1 = 0;//亮灯,低电平点亮
    		delay_10us(10000);//延时100ms
    		LED1 = 1;//熄灭
    		delay_10us(10000);//延时100ms
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述
    code:表示程序所占用 FLASH 的大小。 data:数据储存器内部 RAM 占用大小。 xdata:数据储存器外部 RAM占用大小

    流水灯实验

    通过位运算符for循环实现流水灯效果

    #include "reg52.h"
    
    typedef unsigned char u8;//对系统的默认数据类型进行从命名
    typedef unsigned int u16;//对系统的默认数据类型进行从命名
    
    void delay_10us(u16 ten_us){//延时函数 当参数为ten_us =1时大概延时为10us
    	while(ten_us--);
    }
    void main(){//实现流水灯效果
    	u8 i;
    	while(1){
    		for(i = 0;i<7;i++){
    			P2 =~(0x01<<i);//通过控制P2管脚实现流水灯效果
    			delay_10us(50000);
    		}
    	}
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    #include "reg52.h"
    #define LED_PORT P2 //使用宏定义P2端口
    typedef unsigned char u8;//对系统的默认数据类型进行从命名
    typedef unsigned int u16;//对系统的默认数据类型进行从命名
    
    void delay_10us(u16 ten_us){//延时函数 当参数为ten_us =1时大概延时为10us
    	while(ten_us--);
    }
    void main(){//实现流水灯效果
    	u8 i;
    	while(1){
    		for(i = 0;i<7;i++){
    			LED_PORT =~(0x01<<i);//通过控制P2管脚实现流水灯效果
    			delay_10us(50000);
    		}
    	}
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    通过内置函数实现流水灯的效果

    _crol_()函数是C语言中的一个字符串操作函数,用于循环左移字符串。

    该函数的作用是将指定长度的字符从字符串的左侧开始移动到右侧,并将右侧的空位填充为指定的字符。它的原型如下:

    char * crol ( char * str, int n );

    参数说明:

    • str:指向要进行循环左移操作的字符串的指针。
    • n:表示要移动的字符数。正数表示向右移动,负数表示向左移动。

    返回值:

    • 函数返回指向循环左移后字符串的指针。

    右移函数是_cror_()同上原理

    #include "reg52.h"
    #include "intrins.h"
    #define LED_PORT P2 //使用宏定义P2端口
    
    typedef unsigned char u8;//对系统的默认数据类型进行从命名
    typedef unsigned int u16;//对系统的默认数据类型进行从命名
    
    void delay_10us(u16 ten_us){//延时函数 当参数为ten_us =1时大概延时为10us
    	while(ten_us--);
    }
    void main(){//实现流水灯效果
    	u8 i;
    	while(1){
    		for(i = 0;i<7;i++){
    			LED_PORT =~(_crol_(0x01,i));//通过_crol_函数进行左移控制P2管脚实现流水灯效果
    			delay_10us(50000);
    		}
    		for(i = 0;i<7;i++){
    			LED_PORT =~(_cror_(0x80,i));//通过_cror_函数进行右移控制P2管脚实现流水灯效果
    			delay_10us(50000);
    		}
    	}
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    EVA: Visual Representation Fantasies from BAAI
    20天零基础自学Python | Day6 运算符大全
    DevOps敏捷转型常见误区及避坑指南
    【多线程】吊打 ThreadLocal,谈谈FastThreadLocal为啥能这么快?
    指挥中心实战指挥平台-通信指挥类装备多链路聚合设备解决方案实例
    Bootstrap Modal
    小黑子的java项目开发理解
    Linux - Django + Nginx + uwsgi 部署项目 - 安装 uWSGI 服务器 -(4)
    系统运维网络知识汇总
    FL Studio 20音乐制作教程
  • 原文地址:https://blog.csdn.net/qq_53037676/article/details/132819069