七段数码管模拟演示
码管如下:
用下面的二位数组 每行表示一个数字,每个数字用七段数码管描述,通过控制某几个二极管点亮,拼成一个数字的图像。
int MX[10][7] =
{
{1,1,1,0,1,1,1},//0
{0,0,1,0,0,1,0},//1
{1,0,1,1,1,0,1},//2
{1,0,1,1,0,1,1},//3
{0,1,1,1,0,1,0},//4
{1,1,0,1,0,1,1},//5
{1,1,0,1,1,1,1},//6
{1,0,1,0,0,1,0},//7
{1,1,1,1,1,1,1},//8
{1,1,1,1,0,1,1}//9
};
因为无法驱动真正的数码管,我们把要驱动的数码管所在的位置“描绘”到缓冲区中每个缓冲区只能描绘1个数字,缓冲区“像素”数为:7x4
比如,3号数码管在缓冲区中的描绘为:
....
....
....
@@@@
....
....
....
再比如,5号管描述为:
....
....
....
...@
...@
...@
...@
注意,不同数码管所占据的模拟位置稍有重叠,这并不影响效果。
char BUF1[7][4]; //每个二维数组表示一个数字,三个数组表示一个三位数。
char BUF2[7][4]; //输出时,取每个数组的第一行一起输出,依次类推,因为输出是
char BUF3[7][4]; //从上到下,从左到右进行的,不能倒退
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int MX[10][7] =
{
{1,1,1,0,1,1,1},//0
{0,0,1,0,0,1,0},//1
{1,0,1,1,1,0,1},//2
{1,0,1,1,0,1,1},//3
{0,1,1,1,0,1,0},//4
{1,1,0,1,0,1,1},//5
{1,1,0,1,1,1,1},//6
{1,0,1,0,0,1,0},//7
{1,1,1,1,1,1,1},//8
{1,1,1,1,0,1,1}//9
};
void init_buf(char p[][4])//初始化
{
for (int i = 0; i < 7; i++)
for (int j = 0; j < 4; j++)
p[i][j] = '.';
}
void Fill(int data[],char buf[7][4])//填充缓冲区
{
int i;
for (i = 0; i < 7; i++)
if (data[i])
{
switch(i)
{
case 0:
buf[0][0] = buf[0][1] = buf[0][2] = buf[0][3] = '@';
break;
case 1:
buf[0][0] = buf[1][0] = buf[2][0] = buf[3][0] = '@';
break;
case 2:
buf[0][3] = buf[1][3] = buf[2][3] = buf[3][3] = '@';
break;
case 3:
buf[3][0] = buf[3][1] = buf[3][2] = buf[3][3] = '@';
break;
case 4:
buf[3][0] = buf[4][0] = buf[5][0] = buf[6][0] = '@';
break;
case 5:
buf[3][3] = buf[4][3] = buf[5][3] = buf[6][3] = '@';
break;
case 6:
buf[6][0] = buf[6][1] = buf[6][2] = buf[6][3] = '@';
break;
}
}
}
int main()
{
char BUF1[7][4],BUF2[7][4],BUF3[7][4];
char can[5];
init_buf(BUF1);
init_buf(BUF2);
init_buf(BUF3);
printf("请输入要显示的3位整数(100-999),输入exit退出:");
gets(can);
while (strcmp(can,"exit"))
{
Fill(MX[can[0] - '0'],BUF1);
Fill(MX[can[1] - '0'],BUF2);
Fill(MX[can[2] - '0'],BUF3);
for (int i = 0; i < 7; i++)//输出
{
int j;
for (j = 0; j < 4; j++)
printf("%c",BUF1[i][j]);
printf(" ");
for (j = 0; j < 4; j++)
printf("%c",BUF2[i][j]);
printf(" ");
for (j = 0; j < 4; j++)
printf("%c",BUF3[i][j]);
printf("\n");
}
init_buf(BUF1);
init_buf(BUF2);
init_buf(BUF3);
system("pause");
printf("请输入要显示的3位整数(100-999),输入exit退出:");
gets(can);
}
return 0;
}
本文介绍了如何使用七段数码管进行数字模拟显示,通过控制二极管的点亮状态来呈现数字图像。由于无法直接驱动实物数码管,文章提出了将数码管的显示内容存储到缓冲区中,每个缓冲区可以描绘一个数字,以7x4的像素格式表示。缓冲区中的数据如3和5的显示示例,并指出不同数码管在模拟位置上的轻微重叠不影响整体效果。文中还定义了三个二维字符数组 BUF1, BUF2, BUF3 用于表示三位数的数码管显示。"
37503673,3142583,Ambari 1.4.4 安装指南:OpenSUSE 11,"['开源软件', '集群管理', 'Hadoop', 'SUSE', '操作系统']
7万+

被折叠的 条评论
为什么被折叠?



