请求大神帮助,如何编写3位数码管,位选为P0.5,P0.6,P0.7.段选为P0.0到P0.6对应的a,b,c,d,e,f,g

 我来答
缪立军
2013-05-14 · TA获得超过384个赞
知道小有建树答主
回答量:257
采纳率:100%
帮助的人:173万
展开全部
1)点亮数码管1:给p0.0~p0.6写数据,如a要显示,就把p0.0拉低(假设数码管段低电平接通),将P0.5拉低,P0.6、P0.7拉高,让数码管1显示,延时tms;
2)点亮数码管2:延时结束,将P0.5拉高,并向p0.0~p0.6写数据,对应数码管2要显示的内容,同理将P0.6拉低,P0.5、P0.7拉高,延时tms
3)点亮数码管3:延时结束后,同上,点亮数码管3;
将t设为一个很小的值,但是必须要芯片能支持,如设为20ms(假设支持),那么三个数码管将交替点亮,由于人眼的视觉暂留效果,就会觉得三个数码管一直是点亮的。
追问
大神能给个QQ吗  我是想要具体的程序的!
追答
你用的啥控制芯片我都不知道,给你个示例程序.
有个问题,你P0.5和P0.6两个不能复用的,因为数据和片选信号要同时给上才能控制亮。
给你改掉,假设数据还是P0.0~P0.6,控制为P1.0、P1.1、P1.2
//首先,给数码管数据赋值,对应要显示什么就给P0.0~P0.6赋值什么,这里自己去对应数据,
//f0~f6取值为0或1,点亮哪段就把哪段赋值0(假设低电平为点亮)

方法1:用循环
while(condition)//跳出循环的条件根据实际需要设定
{
P0.0=f0;P0.1=f1;P0.2=f2;P0.3=f3;P0.4=f4;P0.5=f5;P0.6=f6;
P1.0=0;P1.1=1;P1.2=1;//1号数码管选通,点亮
wait(20);//这个函数要根据你自己的开发环境去给,函数传入参数单位为ms
P0.0=f0;P0.1=f1;P0.2=f2;P0.3=f3;P0.4=f4;P0.5=f5;P0.6=f6;
P1.0=1;P1.1=0;P1.2=1;//2号数码管选通,点亮
wait(20);
P0.0=f0;P0.1=f1;P0.2=f2;P0.3=f3;P0.4=f4;P0.5=f5;P0.6=f6;
P1.0=0;P1.1=1;P1.2=1;//3号数码管选通,点亮
wait(20);
}
方法2:定时器
//while和wait的功能也可以由定时器取代,如定时器中断函数为timer,定时器定时时间为20ms
//定义全局计数变量num,初始化为1;
timer
{
switch(num)
{
case 1:
P0.0=f0;P0.1=f1;P0.2=f2;P0.3=f3;P0.4=f4;P0.5=f5;P0.6=f6;
P1.0=0;P1.1=1;P1.2=1;//1号数码管选通,点亮
break;
case 2:
P0.0=f0;P0.1=f1;P0.2=f2;P0.3=f3;P0.4=f4;P0.5=f5;P0.6=f6;
P1.0=1;P1.1=0;P1.2=1;//2号数码管选通,点亮
break;
case 3:
P0.0=f0;P0.1=f1;P0.2=f2;P0.3=f3;P0.4=f4;P0.5=f5;P0.6=f6;
P1.0=0;P1.1=1;P1.2=1;//3号数码管选通,点亮
break;
}
num++;
if (num==4)
num=1;
}
用定时器的话定时器初始化那些东西要根据实际使用的控制芯片和定时器DATASHEET确定,这个需要你自己去配置了。
循环有个缺点,会浪费太多的CPU资源,等待事件内CPU不能做其它事情,定时器的好处是你在点亮数码管的时候还可以做其它事情,只有定时器中断后才来响应点亮事件,相当于一个多线程的概念。
希望采纳!
长空之遥
2013-05-14 · 超过16用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:41.2万
展开全部
是啥单片机?

汇编语言吗?

我只会avr汇编
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式