圣龙扬特-AVR电子
标题:
数码管的8段 不是接在一个P口 程序中要怎么处理
[打印本页]
作者:
oszp1688com
时间:
2013-3-5 21:59
标题:
数码管的8段 不是接在一个P口 程序中要怎么处理
数码管的8段 不是接在一个P口 而是接在不同的P口 程序中要怎么处理
作者:
avrbase_lei
时间:
2013-3-5 22:42
数码管不是分了共阴极和共阳极的么?
不在同一个P口,你就不会先关闭数码管,再送数据,然后再开启这个“共阴”“共阳”的控制脚么?这不就很好的完成了么?
作者:
枯恋凡尘
时间:
2013-3-5 22:46
本帖最后由 枯恋凡尘 于 2013-3-5 23:09 编辑
比如分2个口,P1 P0,P1占用高4BIT,P0占用低4BIT
void display(unsigned char dat)
{
/*位选代码省略*/
P1&=(dat|0x0F);
P0&=(dat|0XF0);
}
这种是比较集中的IO,再分散的用指针,你现在也看不懂,不写了吧。
/*下面的是指针版本,没有验证过,有错请提出*/
typedef struct seg {
void (*set_a)(unsigned char i);
void (*set_b)(unsigned char i);
void (*set_c)(unsigned char i);
void (*set_d)(unsigned char i);
void (*set_e)(unsigned char i);
void (*set_f)(unsigned char i);
void (*set_g)(unsigned char i);
void (*set_h)(unsigned char i);
} seg_led,*p_seg_led;
/*定义一个变量*/
seg_led seg;
void set_io_a(unsigned char dat)
{
if(dat!=0)
{
P1.0=1;
}
else
{
P1.0=0;
}
}
void init_seg(p_seg_led seg)
{
seg.set_a=set_io_a;
.....其他一致懒的写
}
void display(p_seg_led s,unsigned char dat)
{
s->set_a(dat>>7);
.....其他一致
}
作者:
多啦A梦
时间:
2013-3-5 22:52
刚开始的时候这个问题确实我点绕!想通了就好了!
作者:
小毛驴
时间:
2013-3-5 22:54
阿黄加油~加油lu
作者:
北美海豹
时间:
2013-3-5 22:59
void subDisplay(char charDaata)
{
if(charDaata&0x01)
{
PORTA|=1<<6;
}
else
{
PORTA&=~(1<<6);
}
--------
if(charDaata&0x80)
{
PORTB|=1<<7;
}
else
{
PORTB&=~(1<<7);
}
}
作者:
oszp1688com
时间:
2013-3-5 23:13
谢谢各位 嘿嘿
作者:
avrbase_lei
时间:
2013-3-5 23:47
#define M_SET_BIT(B,n) do{B |= (0x01<<n);}while(0)
#define M_CLR_BIT(B,n) do{B &= ~(0x01<<n);}while(0)
#define M_OPEN_SEG_A() M_SET_BIT(P1, 0) //表示P1口第一个引脚, P10
#define M_CLOSE_SEG_A() M_CLR_BIT(P1, 0)
//ABCDEFGH, 类推
int main(void)
{
M_OPEN_SEG_A();
//...
return 0;
}
复制代码
这样行么?
作者:
铜河
时间:
2013-3-6 08:45
阿黄,高!
作者:
yingmulufei
时间:
2013-3-6 09:14
路过!!
作者:
★一辉︿♂︿
时间:
2013-3-6 12:05
大黄是马蜂吗 浑身指针
作者:
oszp1688com
时间:
2013-3-6 20:54
枯恋凡尘 发表于 2013-3-5 22:46
比如分2个口,P1 P0,P1占用高4BIT,P0占用低4BIT
void display(unsigned char dat)
{
写具体一点点咯 本来看的就很吃力了
最好来点注释 嘻嘻
作者:
箫天
时间:
2013-3-6 21:52
别人主要提供思路和方法,具体还要靠自己不断琢磨。
作者:
xzwj
时间:
2013-3-9 18:34
别把 PA的8个 口 当成一个 口用,其实8个口是独立的!PORTA=0xff;与(PORTA|=0x80; PORTA|=0x40; PORTA|=0x20;··········)的现象差不多。
欢迎光临 圣龙扬特-AVR电子 (http://avr.cnta.net/)
Powered by Discuz! X2.5