在线时间400 小时
UID2075309
注册时间2014-2-25
NXP金币83
TA的每日心情 | 开心 2019-10-17 08:07 |
---|
签到天数: 273 天 连续签到: 1 天 [LV.8]以坛为家I
金牌会员
 
- 积分
- 7508
- 最后登录
- 2021-8-30
|
用二个74HC595驱动4位数码管,采用动态扫描的方式,最多可以驱动8位。
驱动显示模块原理图:
对应的IO口,并把所有的IO口设置为上拉输出,相关例程在这里:
https://www.nxpic.org.cn/module/ ... amp;fromuid=2075309
#define SDA_1 am_gpio_set(13,TRUE)
#define SDA_0 am_gpio_set(13,FALSE)
#define SCK_1 am_gpio_set(17,TRUE)
#define SCK_0 am_gpio_set(17,FALSE)
#define RCK_1 am_gpio_set(18,TRUE)
#define RCK_0 am_gpio_set(18,FALSE)
595写入数据程序:
void WR_595(unsigned char temp)
{
unsigned char d;
for(d=0; d<8; d++)
{
if(temp&0x01)
SDA_1;
else
SDA_0;
SCK_1;
SCK_0;
temp=temp>>1;
}
}
更新显示数据数组:
void display_updata(unsigned int d)
{
displaynum[0]=d/1000;
displaynum[1]=d%1000/100;
displaynum[2]=d%1000%100%100/10;
displaynum[3]=d%1000%100%100%10;
}
数码管显示程序:
void display(unsigned int d)
{
unsigned char ch=0;
display_updata(d);
for(ch=0;ch<4;ch++)
{
WR_595(displaytab[displaynum[ch]]);
WR_595(display_bit[ch]);
RCK_1;
RCK_0;
}
}
先要定义相关的几个数组:
const unsigned char displaytab[]={
0X03,/*0*/
0X9F,/*1*/
0X25,/*2*/
0X0D,/*3*/
0X99,/*4*/
0X49,/*5*/
0X41,/*6*/
0X1F,/*7*/
0X01,/*8*/
0X09,/*9*/
};
const unsigned char display_bit[4]={0x80,0x40,0x20,0x10};
unsigned char displaynum[4]={0X00,0x01,0x02,0x03};
同时也要申明一下IO口设置输了状态的函数,要不会有警告
extern int am_gpio_set (int pin, int value);
然后在main函数里面调用display函数就可以显示了:
void demo_std_led_entry (void)
{
while (1) {
display(1234);
}
}
看看效果:
|
|