void+delay(uint+k)*****{*****uint+i,j;*****for(i=7;i<k;i++*****for(j=0;j<124;j++);
时间: 2023-10-04 10:03:48 浏览: 30
这是一个简单的延时函数,函数的参数k表示延时的时间,单位为毫秒。该函数使用两层循环实现延时,循环的次数与延时时间成正比。具体来说,循环次数为 k*1000/124/7,其中124为内层循环的次数,7为外层循环的次数。
需要注意的是,该函数的延时精度可能会受到硬件及其他因素的影响,因此在实际使用中需要进行充分的测试和验证。
相关问题
C51 matrix led 16*16 显示学号
好的,如果您想在C51的16*16点阵LED屏幕上显示学号,您需要编写相应的C语言程序,并将程序烧录到C51单片机中。以下是一个示例程序,可以实现在16*16点阵LED屏幕上显示学号:
```
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[] = { // 学号的字形数据
0x00,0x7E,0x42,0x42,0x7E,0x00,0x00,0x00,
0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x00,
0x00,0x7E,0x42,0x42,0x7E,0x00,0x00,0x00,
0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x00,
0x00,0x7E,0x42,0x42,0x7E,0x00,0x00,0x00,
0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x00,
0x00,0x7E,0x42,0x42,0x7E,0x00,0x00,0x00,
0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x00,
};
void delay(uint xms) { // 延时函数
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main() {
uchar i,j,k;
while(1) {
for(i=0;i<8;i++) { // 控制行
for(j=0;j<8;j++) { // 控制列
k = table[i*8+j];
for(uchar n=0;n<8;n++) { // 控制字形的每一行
if(k&0x80) // 如果当前位为1,则点亮相应LED
P1 = ~(0x01<<j); // P1为LED点阵的列线,低电平点亮
else
P1 = 0xFF; // 否则熄灭LED
P0 = ~(0x01<<i); // P0为LED点阵的行线,低电平选中当前行
delay(1); // 延时一段时间,控制LED点亮的时间
k <<= 1; // 将字形数据左移一位,以便控制下一位LED
}
}
}
}
}
```
在上面的示例程序中,我们使用了一个包含学号字形数据的数组,然后通过循环控制LED点阵的每一个像素点,以实现在16*16点阵LED屏幕上显示学号。需要注意的是,程序中需要使用延时函数来控制LED点亮的时间。
stm32f103 5*4键盘代码
以下是一个简单的STM32F103 5×4键盘代码,使用4x4矩阵键盘扩展器:
```
#include "stm32f10x.h"
#define ROW GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11
#define COLUMN GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15
void delay_ms(uint32_t ms) {
volatile uint32_t nCount;
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq(&RCC_Clocks);
nCount = (RCC_Clocks.HCLK_Frequency / 10000) * ms;
for (; nCount != 0; nCount--);
}
int main(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = ROW;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = COLUMN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
while (1) {
for (int i = 0; i < 4; i++) {
GPIO_ResetBits(GPIOB, COLUMN);
GPIO_SetBits(GPIOB, COLUMN | 1 << (i + 12));
for (int j = 0; j < 4; j++) {
if (!GPIO_ReadInputDataBit(GPIOA, ROW | 1 << (j + 8))) {
// 执行对应按键的操作
}
}
delay_ms(50);
}
}
}
```
该代码通过轮询每个列,检测每个行上的按键是否被按下。如果某个按键被按下,则执行对应的操作。你可以在“执行对应按键的操作”处添加你想要的代码。