48路流水灯374扩展流水灯电路仿真,求C怎么控制
有谁写过这个电路的硬件程序,原来的程序是汇编,我看不懂汇编哪位大哥帮帮忙指导一下这个C程序的流水灯程序怎么写,只需要正传15圈后然后反转15圈,可以按扭调流水灯快慢!带仿真和汇编在里面,大家可以仿真一下,这个我是在其它东风找的。 感觉和点阵一样,74154做位选,P0数据 #include<reg51.h>#define uchar unsigned char
#define uintunsigned int
sbit EN=P3^6;
void delay5ms();
void delay400ms();
void hy4(){//;花样4全亮
uchar a;
for(a=0; a<6; a++){
P2=a;
P0=0xff;
P2=0;
}
}
void hy3(){ //;花样3全灭
uchar a;
for(a=0; a<6; a++){
P2=a;
P0=0x00;
P2=0;
}
}
void hy2(){ //;花样2从左到右亮,然后从右到左灭
// mov a,#01h
// mov r6,#6
// hy21: mov dptr,#0000h
// hy22: mov r7,#8
// hy2lp:movx @dptr,a
// setb c
// rlc a
// lcall delay5ms
// djnz r7,hy2lp
// inc dph
// djnz r6, hy22
// lcall delay400ms
// mov a,#01h
// mov r6,#6
// hy21a:dec dph
// ; mov dptr,#0000h
// hy22a: mov r7,#8
// hy2lpa:movx @dptr,a
// clr c
// rrc a
// lcall delay5ms
// djnz r7,hy2lpa
// dec dph
// djnz r6, hy22a
// lcall delay400ms
}
void hy1(){//;花样1间隔亮 变换
uchar a, p;
for(p=0; p<0x10; p++){
for(a=0; a<=6; a++){
P2=a;
if( (p % 2)==0){
P0=0xAA;
}else{
P0=0x55;
}
P2=0;
}
delay400ms();
}
}
void delay5ms(){ //;延时子程序(5MS)
uchar i,j;
for(i=25;i>0;i--){
for(j=100; j>0; j--){
;
}
}
}
//;==============延时400毫秒
void delay400ms(){//;延时子程序(400MS)
uchar i,j,k;
for(i=20;i>0;i--){
for(j=100; j>0; j--){
for(k=100; k>0; k--){
;
}
}
}
}
void main(){
delay400ms();
EN=0;
while(1){
hy1(); //;间隔亮10次
delay400ms();
hy3(); //;全灭
delay400ms();//;延时
hy4(); //;全亮
delay400ms();//;延时
hy3(); //;全灭
delay400ms();//;延时
hy4(); //;全亮
delay400ms();//
hy3(); //;全灭
delay400ms();//
hy2(); //;从左到右亮,然后从右到左灭
hy2(); //
}
}
断断续续修改一下,还有一个函数,没改。 devcang 发表于 2012-10-31 17:40 static/image/common/back.gif
#include
#define uchar unsigned char
非常感谢你@@LZ devcang 发表于 2012-10-31 17:40 static/image/common/back.gif
#include
#define uchar unsigned char
不需要按汇编的改为C,可以指导一下就从第1灯开始开始流水死循环15圈完后再反着15圈来回不断的循环怎么写,麻烦你了大哥! SengChuary 发表于 2012-10-31 18:41 static/image/common/back.gif
不需要按汇编的改为C,可以指导一下就从第1灯开始开始流水死循环15圈完后再反着15圈来回不断的循环怎么写 ...
你按 hy1() 修改一下,差不多了。 devcang 发表于 2012-10-31 21:43 static/image/common/back.gif
你按 hy1() 修改一下,差不多了。
想问一下位移应该怎样改,P0口八位移还是按这个片选移,如果选择片选移,是不是每个片选都要按着顺序同步移是吗,不知道我说的对吗?void hy1()
{
uchar a, p;
for(p=0; p<0x10; p++)
{
for(a=0; a<=6; a++)
{
P2=a;
if( (p % 2)==0)
{
P0=0x00;
}
else
{
P0=0xff;
}
P2=0;
}
delay400ms();
}
} devcang 发表于 2012-10-31 21:43 static/image/common/back.gif
你按 hy1() 修改一下,差不多了。
程序改了一下,下面不知道该怎么改了,改的有点不对,也不知道哪里不对:#include<reg51.h>
#define uchar unsigned char
#define uintunsigned int
sbit EN=P3^6;
void delay5ms();
void delay400ms();
void main()
{
delay400ms();
EN=0;
while(1)
{
uint i;
uchar temp,a,p;
P0=temp;
for(p=0; p<0x10; p++)
{
for(a=0; a<=6; a++)
{
P2=a;
if( (p % 2)==0)
{
temp=0x01;
for(i=0;i<8;i++)
{
P0=~temp;
delay400ms();
//temp<<=1;
}
}
}
}
}
}
void delay5ms(){ //;延时子程序(5MS)
uchar i,j;
for(i=25;i>0;i--){
for(j=100; j>0; j--){
;
}
}
}
//;==============延时400毫秒
void delay400ms(){//;延时子程序(400MS)
uchar i,j,k;
for(i=20;i>0;i--){
for(j=100; j>0; j--){
for(k=100; k>0; k--){
;
}
}
}
} 你还是按 hy1() 修改一下好了,其实,就是使每一个374的灯,从0x1到0xff、延时,再从0xff-(1<<n)(0<n<8)
页:
[1]