使用Arduino驱动7段LED显示屏的不同方法

步骤1:
直接从arduino/atmega 328
通过arduino/atmega 328的移位寄存器
直接从arduino/atmega 328进行直接端口操作
通过arduino/atmega 328/按钮计数器的移位寄存器多路复用
通过arduino/atmega 328/电位器计数器的移位寄存器多路复用
1-直接从arduino/atmega 328
自动从零计数到九,然后重复
代码
///感谢grumpy mike http://www.thebox.myzen .co.uk/tutorial/arrays.html
//字节内的led段分配= {dp abcdefg}
int引脚[] = {2、3、4、5、6、7、8、9} ;//分配给dp但未使用的引脚9(char tencode中二进制数组的第一个元素)
int digit [] = {0,1,2,3,4,5,6,7,7,8,9,10 };
int计数器= 0;//将计数器初始化为零
int timer = 1000;//延迟计时器间隔
char tencode [] = {b01111110,b00110000,b01101101,b01111001,b00110011,b01011011,b01011111,b01110000,b01111111,b01111011};
void setup()
{
(int i = 0; i 《8; i ++)//将数字引脚设置为outputs
pinmode(pins [i],output);
}
void loop()
{
for(int j = 0; j 《10; j ++)
{ displayeleven(digit [j]);
delay(timer);
}
}
void displayeleven( int num)
{
int mask = 1; for(int i = 0; i 《8; i ++)
{((mask&tencode [num])== 0)
digitalwrite(pins [i],low);
else digitalwrite(pins [i],high);
mask = mask 《《1;
}
}
步骤2:
2-通过arduino/atmega 328的移位寄存器
从零自动计数到九,然后重复
代码
//字节= {内的led段分配abcdefg dp}
int闩锁pin = 8;//连接到移位寄存器的引脚12
int datapin = 11;//连接到移位寄存器的引脚14
int clockpin = 12;////连接到移位寄存器的引脚11
int i = 0;
字节数字[] = {b11111100,b01100000,b11011010,b11110010,b01100110,b10110110,b10111110,
b11100000,b11111110,b11110110};
void setup()
{
pinmode(datapin,output);//将datapin配置为output
pinmode(latchpin,output);//将闩锁引脚配置为output
pinmode(clockpin,output);//将clockpin配置为output
}
void loop()
{
for(i = 0; i 《10; i ++)
{
digitalwrite(latchpin,low);//将锁存器拉低以开始发送数据
shiftout(datapin,clockpin,lsbfirst,digit [i]);//发送数据
digitalwrite(latchpin,high);//将闩锁拉到高电平以停止发送数据
delay(1000);
}
}
步骤3:
3-直接从arduino/atmega 328直接进行端口操作
从零开始自动计数到9,然后重复
代码
////因为直接端口操作使用引脚0和1,即rx和tx
//分别为引脚,上传代码时必须断开这些引脚
//字节= {dp abcdefg}
字节i = 0内的led段分配;
字节数字[10] = {b01111110,b00110000,b01101101,b01111001,b00110011,b01011011,b01011111,b01110000,b01111111,b01111011};
无效setup()
{
ddrd = b11111111;//将portd(数字7〜0)设置为输出
}
void count()
{
for(i = 0; i 《10; i ++)
{
portd = digit [i];
delay(1000);
portd = 0;
}
}
void loop()
{
count();
}
步骤4:
4-通过从arduino/atmega 328/按钮计数器
按钮在0到8之间递增和递减计数器
代码
//7段led计数器,使用74hc595 8位移位寄存器多路复用,通过按钮开关将计数器从0递增到8到零
//从这些源代码一起整理代码-感谢法尔斯
//http://www.sweeting.org/mark/blog/2011/11/27/arduino-74hc595-shift-register-and-a-7-segment-led-显示
//http://thecustomgeek.com/2011/06/29/multiplexing-for-a-7-yearold/
const int闩锁pin = 5;//引脚连接到74hc595的引脚12(锁存器)
const int datapin = 6;//引脚连接到74hc595的引脚14(数据)
const int clockpin = 7;//引脚连接到74hc595的引脚11(时钟)
int uppin = 12;//按钮连接到引脚12
int downpin = 13;//按钮连接到引脚12
int currupstate = 1;//将currupstate初始化为high
int currdownstate = 1;//将currdownstate初始化为high
int prevupstate = 0;
int prevdownstate = 0;
int counter = 0;//将计数器初始化为零
const字节编号[10] =//用显示段0、1、2、3、4、5、6、7、8、9 《描述每个数字/p》
{
b11111100,
b01100000,
b11011010,
b11110010,
b01100110,
b10110110,
b10111110,
b11100000,
b11111110,
b11100110,
};
void setup()
{
pinmode(latchpin,output);//将sr引脚设置为输出
pinmode(clockpin,output);
pinmode(datapin,output);
pinmode(uppin,input);//将引脚12设置为按钮输入
pinmode(downpin,input);//将引脚13设置为按钮输入
}
void loop()
{
currupstate = digitalread(uppin);
if(prevupstate!= currupstate)//状态从
{//从高变为低,反之亦然
prevupstate = currupstate;
if(currupstate == high)//如果按下按钮
counter ++;//将计数器加1
//延迟(1);
}
if(counter》 8)
计数器-= 1;
show(numbers [counter]);//显示当前数字
currdownstate = digitalread(downpin);
如果(prevdownstate!= currdownstate)//状态从
{//从高到低,反之亦然
prevdownstate = currdownstate;
if(currdownstate == high)//如果按下按钮
counter- = 1 ;//将计数器减1
//delay(1);
}
if(counter 《0)
counter ++ ;
show(numbers [counter]);//显示当前数字
}
void show(字节数)
{
////使用循环和按位and移至组成
//七段显示的每一位(从左到右,a =》 g),然后检查
//看是否应该
for(int j = 0; j 《= 7; j ++)
{
byte towrite = number&(b10000000 》》 j );
if(!towrite){
continue;
}//如果所有位均为0,则将其写入移位寄存器没有意义,因此
shiftit(towrite);继续操作。////否则将其移入寄存器
}
}
void shiftit(字节数据)
{
digitalwrite(latchpin,low);//将这8位时钟输入到寄存器中时将闩锁引脚low
for(int k = 0; k 《= 7; k ++)
{
digitalwrite(clockpin,low);//clockpin在发送位之前为低电平
if(data&(1 《
{
digitalwrite(datapin,high);//打开“
}
else
{
digitalwrite(datapin,low);//将“关闭”
}
digitalwrite(clockpin,high);//并为
}
digitalwrite(clockpin,low)中的位提供时钟//停止移出数据
digitalwrite(latchpin,high);//将闩锁pin设置为高电平以锁定并发送数据
}
步骤5:
5-通过arduino/atmega 328/电位计计数器的移位寄存器多路复用
电位计用于在0到8之间递增和递减计数器
code
//7段led计数器,使用74hc595 8位移位寄存器进行多路复用,通过电位计将计数器从0递增为8到0 资料来源-感谢法尔斯
//http://www.sweeting.org/mark/blog/2011/11/27/arduino-74hc595-shift-register-and-a-7-segment-led-display
//http://thecustomgeek.com/2011/06/29/multiplexing-for-a-7-yeard/
const int闩锁pin = 5;//引脚连接到74hc595的引脚12(锁存器)
const int datapin = 6;//引脚连接到74hc595的引脚14(数据)
const int clockpin = 7;//引脚连接到74hc595的引脚11(时钟)
int counter = 0;//将计数器初始化为零
int potreading = 0;
const字节编号[10] =//用显示段0、1、2、3、4、5来描述每个数字6,7,8,9
{
b11111100,
b01100000,
b11011010,
b11110010,
b01100110,
b10110110,
b10111110,
b11100000,
b11111110,
b11100110,
};
void setup()
{
pinmode(latchpin,output);//将sr引脚设置为输出
pinmode(clockpin,output);
pinmode(datapin,output);
}
void loop()
{
potreading =模拟读取(a0);
potreading = map(potreading,0,1023,0,8);
{
if(potreading》 8)
potreading-;
show(numbers [potreading]);
}
{
if(potreading 《0)
potreading ++;
show(numbers [potreading] );
}
}
void show(字节数)
{
//使用循环和按位and移至使向上
//七段显示(从左到右,a =》 g),然后检查
//是否应打开
for(int j = 0; j 《= 7; j ++)
{
要写入的字节=数字&(b10000000 》》 j);
if(!towrite){
continue;
}//如果全部位为0,则无意义将其写入移位寄存器,因此请中断并继续执行下一段。
shiftit(towrite);//否则将其移入寄存器
}
}
void shiftit(字节数据)
{
digitalwrite(latchpin,low);//将这8位时钟输入到寄存器
时将闩锁引脚low设置为(int k = 0; k 《= 7; k ++)
{
digitalwrite(clockpin,low);//clockpin在发送位之前为低电平
////请注意,在我们的示例中,对于
//“ on”,我们需要将pinstate设置为0(low),因为74hc595吸收电流时使用常见的
//阳极显示器。如果要使用公共阴极显示器,则
//将其切换。
if(data&(1 《 {
digitalwrite(datapin,high);//打开“
}
else
{
digitalwrite(datapin,low);//关闭“
}
digitalwrite(clockpin,high);//并时钟
}
digitalwrite(clockpin,low);中的位//停止移出数据
digitalwrite(latchpin,high);//将闩锁pin设置为高电平以锁定并发送数据
}

三一重工探索工业大数据 成功转型成“智造范”
瑞可达成为苏州市光电产业二十强企业
Si二极管用的散热性能出色的小型封装“PMDE”评估-PMDE封装的散热性能 (仿真)
到2023年中国区块链支出复合年增长率65.7%将达20亿美元
改善传感器性能的技术途径
使用Arduino驱动7段LED显示屏的不同方法
解析人工智能的3大浪潮、3大技术和3大应用
澳贝森干洗店:黑科技人工智能大展身手
Vishay推出谐振变压器/电感器,节省基板空间、简化LLC应用PCB布局
简单的循迹小车设计与制作解析
中国电信中部智算中心在武汉正式投运
边缘计算可解决物联网与云交互时存在的问题?
每个系统管理员都要知道的 30 个 Linux 系统监控工具
红茶水分测试原理和注意事项
3D旋转音效颇受青睐,原来是一款VR音频
如何精准表征一个直流分流器,需考虑哪些方面
基于YoloV5的ROS2封装
电动车电子刹车的原理是什么
苹果将于12月发布iphone8,小米6详细配置外形抢先看!
Garcia为测试攻击编写了一个Metasploit模组