AVR单片机 数码管显示问题? 单片机: ATMEGA128A AU1101
答案:2 悬赏:60 手机版
解决时间 2021-03-23 03:59
- 提问者网友:伴风望海
- 2021-03-22 13:22
AVR单片机 数码管显示问题? 单片机: ATMEGA128A AU1101
最佳答案
- 五星知识达人网友:忘川信使
- 2021-03-22 14:12
PB_0-3 接595,PB_4-7 接位选端吧,你的动态扫描,没写对,要理解过程:一次点亮一个数码管,一段时间后,点亮下一个,如此循环。595的,你自己写啦,也省掉了部分代码。
uchar disbuf[4] = {0}; //4位数码管显示缓存
void WriteData(ucahr dat){...} //向595里写数据dat;注意,不要干扰到PB_4-7几个脚。
void display(){
static uchar Com = 0;
PORTB &= 0x0f; //清零PB_4-7,消影;
WriteData(data[disbuf[Com]]); //写段码
PORTB |= (1 << (Com + 4)); //写位码
Com = (Com + 1) % 4;
}
void main()
{
DDRB = 0xff;
disbuf[0] = 2; //写要显示的数字
while(1){
display();
delay(100);
}
}追问能写一个 0-9 循环显示的不? 我有4个LED 全他们全部显示一样的数字即可
谢谢了
你的程序没看明白, 显示那部分位选是三极管控制的 段选是595控制
那我一直把4个位选全部打开 然后送数据进去 ??追答这是动态显示数码管。同一时间只能打开一个数码管,其它的要灭掉,一段时间后,灭掉这个,再打开下一个,如此循环。才会形成动态的显示。一次全打开,你能把它显示的过程理清楚吗/。
uchar disbuf[4] = {0}; //4位数码管显示缓存
void WriteData(ucahr dat){...} //向595里写数据dat;注意,不要干扰到PB_4-7几个脚。
void display(){
static uchar Com = 0;
PORTB &= 0x0f; //清零PB_4-7,消影;
WriteData(data[disbuf[Com]]); //写段码
PORTB |= (1 << (Com + 4)); //写位码
Com = (Com + 1) % 4;
}
void main()
{
DDRB = 0xff;
disbuf[0] = 2; //写要显示的数字
while(1){
display();
delay(100);
}
}追问能写一个 0-9 循环显示的不? 我有4个LED 全他们全部显示一样的数字即可
谢谢了
你的程序没看明白, 显示那部分位选是三极管控制的 段选是595控制
那我一直把4个位选全部打开 然后送数据进去 ??追答这是动态显示数码管。同一时间只能打开一个数码管,其它的要灭掉,一段时间后,灭掉这个,再打开下一个,如此循环。才会形成动态的显示。一次全打开,你能把它显示的过程理清楚吗/。
全部回答
- 1楼网友:不如潦草
- 2021-03-22 14:18
型号应该选这个Atmega128(please see NOTES) ,估计是你的端口初始化有问题,你把程序简化一下,别循环了,也别闪烁,就让某些为固定为某个电平,然后试试。还有就是你没有把595对。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯