作业4:独立按键+数码管实操

文章目录

1.测试代码照片

测试

2.流水灯视频

流水灯

c 复制代码
#include <reg51.h>   
#define uchar unsigned char 

uchar a; 


void delay(unsigned int time) {
    unsigned int i, j;
    for (i = 0; i < time; i++)
        for (j = 0; j < 120; j++);  
}


void main() {
    P1 = 0xfe; 

    while (1) {
        a = P1;        
        a = a << 1;    
        a = a | 0x01;  

        delay(200);    

        if (a == 0xff) 
        {
            a = 0xfe;  
        }

        P1 = a;        
    }
}

3.独立按键视频(点亮4个灯)

4个灯

c 复制代码
#include <REGX51.H>

sbit KEY1 = P3^4;   // 按键连接
sbit KEY2 = P3^5;   // 按键连接
sbit KEY3 = P3^6;   // 按键连接
sbit KEY4 = P3^7;   // 按键连接

sbit LED1 = P1^0;   // LED连接
sbit LED2 = P1^2;   // LED连接
sbit LED3 = P1^4;   // LED连接
sbit LED4 = P1^6;   // LED连接


// 延时函数
void delay_ms(unsigned int ms) 
{
    unsigned int i, j;
    for(i = 0; i < ms; i++)
        for(j = 0; j < 123; j++);
}

void main() {

    P0 = 0xFF; // 初始所有LED熄灭(因低电平点亮)   
    while(1) 
	{
        if(KEY1 == 0) 	// 按键按下[[
		{            
            delay_ms(10);         // 消抖
            if(KEY1 == 0) 	   // 再次确认按下
			{       
				while(!KEY1); // 等待按键松开,防止连发
                LED1 = ~LED1;//  控制小灯   
            }
        }
		    if(KEY2 == 0) 	// 按键按下
		{            
            delay_ms(10);         // 消抖
            if(KEY2 == 0) 	   // 再次确认按下
			{       
				while(!KEY2); // 等待按键松开,防止连发
                LED2 = ~LED2;//  控制小灯   
            }
        }
		        if(KEY3 == 0) 	// 按键按下
		{            
            delay_ms(10);         // 消抖
            if(KEY3 == 0) 	   // 再次确认按下
			{       
				while(!KEY3); // 等待按键松开,防止连发
                LED3 = ~LED3;//  控制小灯   
            }
        }
		    if(KEY4 == 0) 	// 按键按下
		{            
            delay_ms(10);         // 消抖
            if(KEY4 == 0) 	   // 再次确认按下
			{       
				while(!KEY4); // 等待按键松开,防止连发
                LED4 = ~LED4;//  控制小灯   
            }
        }

    }
}

4.独立按键视频(思考点亮8个灯)

8个灯

5.数码管显示"00000"或者"111111"(照片或者视频)

000000

6.数码管显示"123456"(照片或者视频)

123456

7.数码管显示"11.12.13"(照片或者视频)

111213

8.数码管显示"HH8800"(照片或者视频)

HH8800

c 复制代码
#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit dula = P2^6; // 段选锁存器
sbit wela = P2^7; // 位选锁存器

// 数码管段码表:0~9 + H
uchar code TableDula[] = { 
    0x3F, // 0
    0x06, // 1
    0x5B, // 2
    0x4F, // 3
    0x66, // 4
    0x6D, // 5
    0x7D, // 6
    0x07, // 7
    0x7F, // 8
    0x6F, // 9
    0x76  // H  新增:字母H的段码
};

// 位选:第1~6位数码管
uchar code TableWela[] = {
    0xfe, // 第1位
    0xfd, // 第2位
    0xfb, // 第3位
    0xf7, // 第4位
    0xef, // 第5位
    0xdf  // 第6位
};

// 延时函数
void delay(uchar x)
{
    uchar j;
    while(x--)
    {
        for(j = 0; j < 125; j++);
    }
}

void main() {
    uchar i;

    // 6位数码管显示:H H 8 8 0 0
    uchar displayData[6] = {10, 10, 8, 8, 0, 0};

    // 不需要小数点
    uchar pointFlag[6] = {0, 0, 0, 0, 0, 0};

    while(1) {
        for(i = 0; i < 6; i++) {
            P0 = 0x00;
            dula = 0;
            wela = 0;

            // 选中第i位数码管
            P0 = TableWela[i];
            wela = 1;
            wela = 0;

            // 输出段码
            P0 = TableDula[displayData[i]];
            dula = 1;
            dula = 0;

            delay(2);
        }
    }
}
相关推荐
泡芙嘟嘟1 个月前
keil工程创建常见问题
嵌入式学习
欢乐熊嵌入式编程1 个月前
做一个智能温湿度监控系统(含显示与数据上传)
单片机·温湿度·嵌入式学习·智能温湿度监控系统
欢乐熊嵌入式编程4 个月前
嵌入式中怎么播放音乐?PWM + DAC 实现全流程解析
嵌入式学习·单片机新手·嵌入式音乐·pwm+dac音乐
欢乐熊嵌入式编程4 个月前
嵌入式 LCD 驱动开发全流程详解
驱动开发·嵌入式开发·嵌入式学习·嵌入式如何快速入门
章鱼哥嵌入式开发5 个月前
【 STM32 ADC电压采集与串口显示系统】
stm32·单片机·课程设计·嵌入式学习·实验室测量
cui__OaO9 个月前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习