×

Arduino学习笔记A10_Arduino数码管骰子实验

消耗积分:0 | 格式:rar | 大小:317KB KB | 2012-09-24

分享资料个

电路连接
由于数码管品种多样,还有共阴共阳的,下面我们使用一个数码管段码生成器(在文章结尾) 去解决不同数码管的问题:
本例作者利用手头现有的一位不知品牌的共阳数码管:型号D5611 A/B,在Eagle 找了一个 类似的型号SA56-11,引脚功能一样可以直接代换。所以下面电路图使用SA56-11 做引脚说明。

注意:
1. 将数码管的a~g 段,分别接到Arduino 的D0~D6 上面。如果你手上的数码管未知的话,可以通过通电测量它哪个引脚对应哪个字段,然后找出a~g 即可。
2. 分清共阴还是共阳。共阴的话,接220Ω电阻到电源负极;共阳的话,接220Ω电阻到电源+5v。
3. 220Ω电阻视数码管实际工作亮度与手头现有原件而定,不一定需要准确。
4. 按下按钮即停。


 

源代码
由于我是按照段码生成器默认接法接的,所以不用修改段码生成器了,直接在段码生成器选择共阳极,再按“自动”生成数组就搞定。


 

下面是源代码,由于偷懒不用写循环,使用了部分AVR 语句。

PORTD 这个是AVR 的端口输出控制语句,8 位对应D7~D0,PORTD=00001001 就是D3 和D0 是高电平。

PORTD = a;就是找出相应的段码输出到D7~D0。

DDRD 这个是AVR 语句中控制引脚作为输出/输入的语句。DDRD = 0xFF;就是D0~D7 全部
作为输出脚了。

ARDUINO CODECOPY
/*
Arduino 单数码管骰子
Ansifa 2011-12-28
*/
//定义段码表,表中十个元素由LED 段码生成器生成,选择了共阳极。
inta[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
voidsetup()
{
DDRD = 0xFF; //AVR 定义PortD 的低七位全部用作输出使用。即0xFF=B11111111对
应D7~D0
pinMode(12, INPUT); //D12用来做骰子暂停的开关
}
voidloop()
{
for(int i = 0; i < 10; i++)
{
//将段码输出PortD 的低7位,即Arduino 的引脚D0~D6,这样需要取出PORTD 最高位,即
D7的状态,与段码相加,之后再输出。
PORTD = a[i];
delay(50); //延时50ms
while(digitalRead(12)) {} //如果D12引脚高电平,则在此死循环,暂停LED 跑

}
}

 

 


 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(1)
发评论
chan_jt2005 2018-01-21
0 回复 举报
不错啦。好东西值得收藏 收起回复

下载排行榜

全部1条评论

快来发表一下你的评论吧 !