|
Post by 邱老师 on Jan 2, 2021 3:35:46 GMT
数码管是常见的显示方式之一 接线:UNO上的D0到D6六根线,依次接到数码管旁的a到g接口 链接:https://pan.baidu.com/s/1-juPzuJHInkerbmctwLPaA 提取码:s72w 视频演示链接
视频链接:https://pan.baidu.com/s/15WxWZTPrHxLNwUvcuArgBQ 提取码:sejo int ledCount=8;
//定义段码,这里是共阴段码,如果是共阳只需要在程序中把读到的值按位取反即可
const unsigned char dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int ledPins[] = {
0,1,2, 3, 4, 5, 6, 7, }; // 对应的led引脚
void setup() {
// 循环设置,把对应的led都设置成输出
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT);
}
}
// 数据处理,把需要处理的byte数据写到对应的引脚端口。
void deal(unsigned char value){
for(int i=0;i<8;i++)
digitalWrite(ledPins[i],!bitRead(value,i));//使用了bitWrite函数,非常简单
// !bitRead(value,i),这里前面加!(非运算符号),取决于使用的是共阴还是共阳数码管。
}
// 主循环
void loop() {
// 循环显示0-9数字
for(int i=0;i<10;i++){
deal(dofly_DuanMa[i]);//读取对应的段码值
delay(1000); //调节延时,2个数字之间的停留间隔
}
}
|
|
|
Post by 邱老师 on Jan 2, 2021 4:36:52 GMT
这是8段的数码管,所谓8段就是由8个LED灯组成的显示单元,各LED的定义如下图。 链接:https://pan.baidu.com/s/1WfgzbxmHH2hGJyBtd4ZHtA 提取码:m2lj 结合上面的定义,再定义出0到9这10个数字的段码: dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
解释一下这些段码的含义: 0x3f转成二进制数为:111111 1代表高电平,这里点亮了6个LED,从个位数开始数,依次点亮6个LED,显示为0,G和DP没有点亮;实际上这个二进数前两个零被省略,对应8个LED,就应写成00111111. 再解释1的段码:0x06 16进制的6转为二进数为:110,显示为1,B、C两个LED点亮
|
|
|
Post by 邱老师 on Jan 2, 2021 7:16:11 GMT
bitRead(value,i))函数解析 这是个按位读取的函数,如果value的值是“1101000”,假设i=3,从“1101000”这个值倒读4位,得到1.假设i=4,从“1101000”这个值倒读5位,得到0
|
|
徐晨涛
New Member
Posts: 29
|
Post by 徐晨涛 on Jan 10, 2021 7:16:03 GMT
完成
|
|
叶子郑茂
New Member
Posts: 13
|
Post by 叶子郑茂 on Jan 10, 2021 7:26:59 GMT
完成
|
|
毛显棋
Junior Member
王骞是傻逼SBSBSBSBSBBSBSB
Posts: 80
|
Post by 毛显棋 on Jan 10, 2021 7:35:34 GMT
完成
|
|
滕祠
Junior Member
Posts: 76
|
Post by 滕祠 on Jan 10, 2021 7:37:34 GMT
完成
|
|
毛显棋
Junior Member
王骞是傻逼SBSBSBSBSBBSBSB
Posts: 80
|
Post by 毛显棋 on Jan 10, 2021 7:38:18 GMT
完成
|
|
|
Post by 邱老师 on Feb 5, 2021 17:19:01 GMT
NANO因为有些端口不能使用,所以端口有所变化 int ledCount=8;
//定义段码,这里是共阴段码,如果是共阳只需要在程序中把读到的值按位取反即可
const unsigned char dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int ledPins[] = {
2, 3, 4, 7, 8, 9,10,11 }; // 对应的led引脚
void setup() {
// 循环设置,把对应的led都设置成输出
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT);
}
}
// 数据处理,把需要处理的byte数据写到对应的引脚端口。
void deal(unsigned char value){
for(int i=0;i<8;i++)
digitalWrite(ledPins[i],!bitRead(value,i));//第一个参数是8个接LED的D口输出针脚,第二个参数是value转化为8个二进制的位,也就是8个0和1的组合,通过 //8次循环,把8个D口输出高低电平
// !bitRead(value,i),这里前面加!(非运算符号),取决于使用的是共阴还是共阳数码管。
}
// 主循环
void loop() {
// 循环显示0-9数字
for(int i=0;i<10;i++){
deal(dofly_DuanMa[i]);//读取对应的段码值,每个段码对应一个数字,循环输出0到9,十个16进制参数,给deal函数处理
delay(1000); //调节延时,2个数字之间的停留间隔
}
}
链接:https://pan.baidu.com/s/1czG5E75A-QZjl89y9AotpA 提取码:fe9e
|
|