u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
时间: 2023-10-08 15:05:39 浏览: 172
这是一个定义了一个长度为17的unsigned char数组,其中每个元素都是一个16进制数,表示了0到F十六个数字在7段数码管上显示的方式。这个数组可以用来控制数码管的显示,比如将数字0显示在数码管上,可以通过gsmg_code[0]来获取到对应的16进制数0x3f,然后将这个数发送给数码管的控制芯片。
相关问题
请标注代码的注释:#include <REGX52.H> typedef unsigned int u16; typedef unsigned char u8; #define SMG_A_DP_PORT P0 u8 gsmg_code[10]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; int x,y=0; void delay_10us(u16 ten_us) { while(ten_us--); } int0_srv()interrupt 0 { x=x+1; delay_10us(20000); } int1_srv()interrupt 2 { x=x-1; delay_10us(20000); } void main() { IE=0x85; while(1) { if(x<=9) {SMG_A_DP_PORT=gsmg_code[x];} if(x<0){x=9;} } }
// 引入头文件
#include <REGX52.H>
// 定义数据类型
typedef unsigned int u16;
typedef unsigned char u8;
// 定义端口
#define SMG_A_DP_PORT P0
// 数码管显示的编码
u8 gsmg_code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
// 定义变量
int x,y=0;
// 延时函数
void delay_10us(u16 ten_us) {
while(ten_us--);
}
// 外部中断0服务函数
int0_srv()interrupt 0 {
x=x+1;
delay_10us(20000);
}
// 外部中断1服务函数
int1_srv()interrupt 2 {
x=x-1;
delay_10us(20000);
}
// 主函数
void main() {
// 开启外部中断0和1
IE=0x85;
while(1) {
if(x<=9) {SMG_A_DP_PORT=gsmg_code[x];}
if(x<0){x=9;}
}
}
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; #define GPIO_DIG P0 #define GPIO_KEY P1 u8 KeyValue; //用来存放读取到的键值 u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值 void delay(u16 i) { while(i--); } void KeyDown(void) { char a=0; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f)//读取按键是否按下 { delay(1000);//延时10ms进行消抖 if(GPIO_KEY!=0x0f)//再次检测键盘是否按下 { //测试列 GPIO_KEY=0X0F; switch(GPIO_KEY) { case(0X07): KeyValue=0;break; case(0X0b): KeyValue=1;break; case(0X0d): KeyValue=2;break; case(0X0e): KeyValue=3;break; } //测试行 GPIO_KEY=0XF0; switch(GPIO_KEY) { case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break; case(0Xd0): KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break; } } } while((a<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测 { delay(100); a++; } } void main() { while(1) { KeyDown(); //按键判断函数 GPIO_DIG=~smgduan[KeyValue]; // } }这段代码是什么意思
这段代码是一个基于单片机的矩阵键盘控制数码管显示的程序。程序通过矩阵键盘读取输入的数字,并在数码管上显示。具体实现过程如下:
1. 定义了GPIO_DIG和GPIO_KEY宏,分别对应P0和P1口,用于控制数码管和矩阵键盘的输入输出。
2. 定义了一个数组smgduan,用于存放显示0~F的值的数码管编码。
3. 定义了KeyDown函数用于检测矩阵键盘是否按下,并获取按键对应的键值。在函数中,先设置矩阵键盘的列为低电平,行为高电平,然后读取矩阵键盘的状态,检测是否有按键按下。如果有按键按下,则进行消抖,再次读取矩阵键盘的状态,获取按下的键值。最后再检测按键是否松手。
4. 在主函数中,不断调用KeyDown函数获取键值,并将键值对应的数码管编码取反后输出到数码管上,实现了矩阵键盘控制数码管显示的功能。
阅读全文