流水灯 独立键盘 共阴极数码管 考核内容 1:开机动画:八位LED灯左右各循环一次 (20分) 2:按下按键1:数码管显示自己学号后八位 (20分) 3:按下按键2:LED左移(每隔一个亮一个) (20分) 4:按下按键3:数码管左移显示自己学号最后一位 (20分) 5:按下按键4:实现数码管999累加 (20分) 额外加分项:按键按下可以实现实时中断 (20分)
时间: 2023-05-26 11:07:37 浏览: 73
流水灯:使用8个LED灯,按照顺序逐步点亮,再逐步熄灭,如此循环不止,形成了一种像流水一样的效果。
独立键盘:键盘上的每个按键都与单独的引脚相连接,不像矩阵键盘需要通过按键所在行列的交叉点来判断按键是否按下。
共阴极数码管:LED数码管有共阴极型和共阳极型两种。共阴极指数字显示时需要将该数字的阴极连接在一起,然后再通过驱动不同数字的阳极来实现每个数字的显示。
开机动画:开机时,八个LED灯先一边亮起,一边灭去,之后再换另一边,如此循环一定次数后停止。
按下按键1:按下按键1后,使用数码管显示自己学号后八位,如“20210001”。
按下按键2:按下按键2后,使LED灯从右侧向左侧依次亮起,每隔一个才亮一次,如“10000001”、“01000000”、“00100000”、“00010000”等。
按下按键3:按下按键3后,使用数码管左移,显示自己学号的最后一位,如“1”。
按下按键4:按下按键4后,使数码管从“000”开始,一直累加显示到“999”,如“001”、“002”、“003”……“999”。
实时中断:按键输入时,立即进行中断处理,而不需要等到轮询敲击按键的过程。
相关问题
在P3.0接按钮,控制P2的流水灯,每按一次点亮一盏Led灯,即01234567循环
好的,你可以这样做:
首先,你需要初始化P3.0引脚为输入模式,P2引脚为输出模式,这可以通过P3CON和P2CON来设置。
然后,你需要设置一个变量来记录当前点亮的LED灯的位置,初始值为0。
接下来,你需要编写一个循环,不断检测P3.0引脚的输入状态。当检测到P3.0引脚被按下时,将当前点亮的LED灯位置加1,并将其取模8,以确保LED灯位置始终在0到7之间。
最后,你需要将P2引脚的输出状态设置为当前LED灯位置对应的二进制值。
下面是示例代码,供你参考:
```c
#include <STC15F2K60S2.h>
#define LED_COUNT 8
void init() {
P3CON &= ~(1 << 0); // P3.0设置为输入模式
P2CON |= 0xFF; // P2设置为输出模式
}
void main() {
unsigned char led_position = 0;
init();
while (1) {
if (!(P3 & (1 << 0))) { // 检测P3.0引脚是否被按下
led_position = (led_position + 1) % LED_COUNT; // 更新LED灯位置
P2 = (1 << led_position); // 设置P2引脚的输出状态
while (!(P3 & (1 << 0))); // 等待P3.0引脚被松开
}
}
}
```
单片机1.流水灯:使用一个循环移位寄存器控制 LED 灯的亮灭顺序,通过不断更新寄存器值实现流水灯效果。
流水灯是单片机入门实验中最基础的项目之一。使用一个循环移位寄存器控制 LED 灯的亮灭顺序,通过不断更新寄存器值实现流水灯效果。具体实现步骤如下:
1.定义一个8位的变量,用于保存流水灯的状态,每一位表示一个 LED 灯的状态;
2.将这个变量左移一位,最高位补零,最低位丢弃;
3.将新的变量值输出到 LED 灯上,使得 LED 灯的状态与变量的对应位相同;
4.延时一段时间,以便观察到流水灯的效果;
5.重复执行步骤2~4,实现流水灯的循环效果。
下面是一个基于51单片机的流水灯程序示例:
```
#include <reg52.h>
sbit LED1 = P1^0; //LED1连接在P1.0口
sbit LED2 = P1^1; //LED2连接在P1.1口
sbit LED3 = P1^2; //LED3连接在P1.2口
sbit LED4 = P1^3; //LED4连接在P1.3口
sbit LED5 = P1^4; //LED5连接在P1.4口
sbit LED6 = P1^5; //LED6连接在P1.5口
sbit LED7 = P1^6; //LED7连接在P1.6口
sbit LED8 = P1^7; //LED8连接在P1.7口
void main()
{
unsigned char state = 0x01; //初始化流水灯状态为00000001
while(1)
{
state = (state << 1) | 0x01; //左移一位,并将最低位置为1
P1 = ~state; //取反后输出到P1口,使得LED灯亮起
delay(50000); //延时一段时间,以便观察到流水灯效果
}
}
void delay(unsigned int t)
{
while(t--);
}
```
在上面的程序中,我们定义了8个 LED 灯分别连接在P1口的不同引脚上,通过不断左移一个8位的变量state,并将最低位置为1,实现了流水灯效果。注意,在P1口输出时,使用了取反操作,因为单片机输出高电平时,LED为灭状态。同时,为了延时一段时间,我们定义了一个简单的延时函数。