单片机--C51流水灯4种实验方法

搭建:keil5+proteus8

详见 : 单片机---keil5+proteus8安装与流水灯简单仿真

目录

一、proteus:

二、keil

1.直接赋值法

2.读取数组法

3.库函数法

4.位方法


一、proteus:

绘制原理图

工具:AT89C51 LED-BIBY GROUND(终端模式)

二、keil

1.直接赋值法

cs 复制代码
#include <reg51.h>			 //定义单片机的一些特殊功能寄存器

sbit led1=P0^0;				//定义指定 LED 灯的管脚,连接到 P0.0
sbit led2=P0^1;
sbit led3=P0^2;
sbit led4=P0^3;
sbit led5=P0^4;
sbit led6=P0^5;
sbit led7=P0^6;
sbit led8=P0^7;

void delay(unsigned int i)			//延时函数。unsigned int 定义无符号整型,范围 0 - 65535
{
    while(i--);	//i=1 时,大约延时 10us
}

void main()       //主函数,程序从这里开始执行
{
    while(1)
    {
        led1=0;        //0 表示低电平,点亮 led1
        delay(5000);   //调用延时函数,产生一定时间间隔
        led1=1;        //1 表示高电平,熄灭 led1
        delay(5000);

        led2=0;        //0 表示低电平,点亮 led2
        delay(5000);
        led2=1;        //1 表示高电平,熄灭 led2
        delay(5000);

        led3=0;        //0 表示低电平,点亮 led3
        delay(5000);
        led3=1;        //1 表示高电平,熄灭 led3
        delay(5000);

        led4=0;        //0 表示低电平,点亮 led4
        delay(5000);
        led4=1;        //1 表示高电平,熄灭 led4
        delay(5000);

        led5=0;        //0 表示低电平,点亮 led5
        delay(5000);
        led5=1;        //1 表示高电平,熄灭 led5
        delay(5000);

        led6=0;        //0 表示低电平,点亮 led6
        delay(5000);
        led6=1;        //1 表示高电平,熄灭 led6
        delay(5000);

        led7=0;        //0 表示低电平,点亮 led7
        delay(5000);
        led7=1;        //1 表示高电平,熄灭 led7
        delay(5000);

        led8=0;        //0 表示低电平,点亮 led8
        delay(5000);
        led8=1;        //1 表示高电平,熄灭 led8
        delay(5000);
    }
}

2.读取数组法

cs 复制代码
#include <reg51.h>

// 定义延时函数,参数 t 为循环次数
void delay(unsigned int t)
{
    while (t--);
}


void main(void)
{
    char st[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
    int t = 0;
    while(1)
    {
        // 将数组 st 中的元素赋值给 P0 端口
        P0 = st[t];
        // 调用延时函数,延时一段时间
        delay(50);
        t++;
        // 当 t 等于 8 时,重新将 t 置为 0,实现循环遍历数组 st
        if(t == 8){
            t = 0;
        }
    }
}

3.库函数法

cs 复制代码
#include <reg52.h>
#include <intrins.h>   //当调用_cror_右移库函数和_crol_左移库函数时,需调用头文件<intrins.h>
                       //注意:库函数的移位不会自动补0,是最高位向最低位,进行移位的
                       //了解函数的参数:extern unsigned char _crol_  (unsigned char, unsigned char);
                       //第一个参数是移动的值,第二个参数是移动的位数
#define LED_PORT	P0


// 定义一个延迟函数,参数 ten_us 是循环次数,通过循环消耗时间来实现延迟
void delay_10us(ten_us)
{
    while(ten_us--);
}

void main()
{
    int i = 0;         
    LED_PORT = 0xfe;  
	
    while(1)
    {
        for(i=0;i<7;i++)  // 循环实现左移流水灯效果,循环 7 次是因为初始状态下只需要移动 7 次就可以完成一个循环
        {
            // 使用 _crol_ 函数对 LED_PORT 的值进行左移一位操作
            LED_PORT = _crol_(LED_PORT,1);
            // 调用延迟函数,延迟一段时间
            delay_10us(50000);
        }
    }
}

4.位方法

cs 复制代码
#include <reg52.h>
#include <intrins.h>   //当调用_cror_右移库函数和_crol_左移库函数时,需调用头文件<intrins.h>
                       //注意:库函数的移位不会自动补0,是最高位向最低位,进行移位的
                       //了解函数的参数:extern unsigned char _crol_  (unsigned char, unsigned char);
                       //第一个参数是移动的值,第二个参数是移动的位数
#define LED_PORT	P0

typedef unsigned int u16;
typedef unsigned char u8;

// 定义一个延迟函数,参数 ten_us 是循环次数,通过循环消耗时间来实现延迟
void delay_10us(u16 ten_us)
{
    while(ten_us--);
}

void main()
{
    u8 i = 0;         
    LED_PORT = 0xfe;  
    delay_10us(50000);
	
    while(1)
    {
        for(i=0;i<7;i++)  // 循环实现左移流水灯效果,循环 7 次是因为初始状态下只需要移动 7 次就可以完成一个循环
        {
            // 使用 _crol_ 函数对 LED_PORT 的值进行左移一位操作
            LED_PORT = _crol_(LED_PORT,1);
            // 调用延迟函数,延迟一段时间
            delay_10us(50000);
        }
        // 右移同理
        for(i=0;i<7;i++)
        {
            LED_PORT = _cror_(LED_PORT,1);
            delay_10us(50000);
        }
    }
}
相关推荐
FreakStudio9 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘14 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
zd84510150014 天前
RS485 总线详解
单片机·嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘14 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展14 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司14 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑14 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习
意法半导体STM3215 天前
【官方原创】如何为STM32CubeMX2配置Visual Studio Code配置方案
vscode·stm32·单片机·嵌入式硬件·策略模式·stm32cubemx·嵌入式开发
雾削木15 天前
B语言经典教程现代化重构
java·前端·stm32·单片机·嵌入式硬件
Hello-FPGA15 天前
Camera Link 与 CoaXPress 技术对比 如何选择你的相机接口
单片机·嵌入式硬件