```
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2
sbit LSB=P2^3
sbit LSC=P2^4
uchar code table[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,0x00}
// 数码管0~F的编码
uchar keyCode// 按键值
uchar num = 0// 显示的数字
void delay(uint x)
{
uint i,j
for(i=xi>0i--)
for(j=110j>0j--)
}
void DigDisplay()
{
uchar i
for(i=0i<8i++)
{
switch(i)
{
case(0):LSA=0LSB=0LSC=0break //选择第0位数码管
case(1):LSA=1LSB=0LSC=0break //选择第1位数码管
case(2):LSA=0LSB=1LSC=0break //选择第2位数码管
case(3):LSA=1LSB=1LSC=0break //选择第3位数码管
case(4):LSA=0LSB=0LSC=1break //选择第4位数码管
case(5):LSA=1LSB=0LSC=1break //选择第5位数码管
case(6):LSA=0LSB=1LSC=1break //选择第6位数码管
case(7):LSA=1LSB=1LSC=1break //选择第7位数码管
}
P0 = table[num]
delay(1) // 延迟一段时间
P0 = 0x00// 清空P0,关闭所有数码管,以便制造闪烁效果
}
}
void KeyDown()
{
if(keyCode==0x0D) // 判断是否按下键盘数字3
{
num = 3 // 显示数字3
}
}
void main()
{
while(1)
{
keyCode=P1 // 读取键盘按键值
if(keyCode!=0xff) // 如果不是按下任何键,则不响应
{
KeyDown() // 判断用户按下哪个键
DigDisplay() // 7段数码管显示
}
}
}
```
上面的代码实现了一个简单的程序,实现了单片机键盘按键输入数字3,然后在7段数码管上显示数字3。程序中使用了数码管的位选功能和键盘扫描功能,以及延迟和数码管编码表等知识。
这里给出一种基于Arduino平台的单片机数字0到9显示的程序代码,可供参考:c++
Copy code
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11} //定义LED引脚
int numPins[][7] = { //定义数字0~9的LED点阵图形
{1, 1, 1, 1, 1, 1, 0}, //0
{0, 1, 1, 0, 0, 0, 0}, //1
{1, 1, 0, 1, 1, 0, 1}, //2
{1, 1, 1, 1, 0, 0, 1}, //3
{0, 1, 1, 0, 0, 1, 1}, //4
{1, 0, 1, 1, 0, 1, 1}, //5
{1, 0, 1, 1, 1, 1, 1}, //6
{1, 1, 1, 0, 0, 0, 0}, //7
{1, 1, 1, 1, 1, 1, 1}, //8
{1, 1, 1, 1, 0, 1, 1} //9
}
void setup() {
for (int i = 0i <10i++) { //初始化LED引脚为输出模式
pinMode(ledPins[i], OUTPUT)
}
}
void loop() {
for (int num = 9num >= 0num--) { //从数字9到0循环
for (int i = 0i <7i++) { //依次点亮数字的7个LED
digitalWrite(ledPins[i], numPins[num][i])//控制LED引脚输出高低电平
}
delay(1000) //延时1秒
}
}
该程序利用数组存储数字09的LED点阵图形,并通过循环依次点亮每个数字的7个LED,从而实现数字09的循环显示。可以根据需要对延时时间进行调整,以达到合适的显示效果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)