找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2629|回复: 10
收起左侧

Proteus仿真 使用cd4094和xcom做流水灯

[复制链接]
ID:893765 发表于 2021-6-10 09:07 | 显示全部楼层 |阅读模式
仿真如图 求教思路
1.jpg
回复

使用道具 举报

ID:893765 发表于 2021-6-10 10:43 | 显示全部楼层
删除本帖
回复

使用道具 举报

ID:824490 发表于 2021-6-10 17:40 | 显示全部楼层
你要解决的问题有3:
1、通IO口,把数据发送出去;
2、4094的驱动;
3、流水灯的流水方式。
回复

使用道具 举报

ID:893765 发表于 2021-6-10 18:13 | 显示全部楼层
#include<reg51.h>
#include<intrins.h>
sbit STB=P3^4;
void main(void)
{unsigned char led=0xfe;
unsigned int i;
SCON=0x00;
ES=0;
while(1)
{STB=1;
  SBUF=led;
  while(TI==0)
  STB=0;
  TI=0;
  for(i=0;i<20000;i++)
  led=_crol_(led,1);
  }
}

仿真只有第一盏灯亮
回复

使用道具 举报

ID:824490 发表于 2021-6-11 08:59 | 显示全部楼层
田所浩二单推人 发表于 2021-6-10 18:13
#include
#include
sbit STB=P3^4;

这样当然不行啦!
4094的手册你看过了吗?数据移位的基本条件是CLK的的上跳变。
“在CLK的上升沿,把SDA上的数据移入”,你看你的代码有做到了吗?
你要把8bit的数据拆开一位一位在从SDA口发出,同时CLK也要做相应的上、下跳变。CLK是什么?就是时钟信号,在传输SDA时要有相应的、变化高低的。你的代码中光有SDA变化不够的。
再努努力,你就要成功了。+U!
回复

使用道具 举报

ID:123289 发表于 2021-6-11 11:20 | 显示全部楼层
是4094未认真读通。
回复

使用道具 举报

ID:893765 发表于 2021-6-11 12:06 | 显示全部楼层
名字不是重点 发表于 2021-6-11 08:59
这样当然不行啦!
4094的手册你看过了吗?数据移位的基本条件是CLK的的上跳变。
“在CLK的上升沿,把SD ...

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit DATA=P3^0;
sbit CLK=P3^1;
sbit STB=P3^4;

void delay(void)
{uchar i;
for(i=0;i<2;i++)
_nop_();
}

void main(void)
{uchar led=0xfe;
SCON=0x00;
ES=0;
while(1)
{STB=1;
  SBUF=led;
  while(TI==0)
  STB=0;
        if(SBUF&0x01)
        {DATA=1;}
        else
        {DATA=0;}
  CLK=0;
  delay();
  CLK=1;
  delay();
  CLK=0;
  TI=0;
  delay();
  led=_crol_(led,1);
  }
}
照葫芦画瓢弄的 仿真灯全亮(笑cry)
回复

使用道具 举报

ID:824490 发表于 2021-6-11 12:16 | 显示全部楼层
你不要用串口来发数据啊。。

void LED_OUT(uchar data) //这是发送一个字节(8位)数据的函数,给你参考一下。
{
        uchar i;
        for(i=8;i>=1;i--)
        {
                sda= (data &0x80)
                data <<=1;
                sck= 0;
                sck= 1;
        }
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:893765 发表于 2021-6-11 22:46 | 显示全部楼层
名字不是重点 发表于 2021-6-11 12:16
你不要用串口来发数据啊。。

void LED_OUT(uchar data) //这是发送一个字节(8位)数据的函数,给你参考 ...

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit DATA=P3^0;
sbit CLK=P3^1;
sbit STB=P3^4;

void delay(void)
{uchar i;
for(i=0;i<2;i++)
_nop_();
}

void main(void)
{uchar t;
STB=0;
uchar led=0xfe;
SCON=0x00;
ES=0;
SBUF=led;
for(t=0;t<8;t++)
{if(led&0x80)
        {DATA=1;}
else
        {DATA=0;}
  CLK=0;
  delay();
  CLK=1;
  led=_crol_(led,1);
  delay();
  CLK=0;
}
  STB=1;
  delay();
  STB=0;
}

更加照葫芦画瓢了 左移那句不知为啥报错led未定义
回复

使用道具 举报

ID:824490 发表于 2021-6-12 00:12 | 显示全部楼层
田所浩二单推人 发表于 2021-6-11 22:46
#include
#include
#define uchar unsigned char

呵呵。。。太晚了,睡了吗?
你都知道报错led未定义了,你就不会把
STB=0;
uchar led=0xfe;
这两行对调一下顺序?
还有,你知道SCON、ES、SBUF这些专用寄存器和标志位有正确用途吗?
照葫芦画瓢了,还能画出个南瓜来。
太晚了,睡吧,明天还在上班,歹命啊!
回复

使用道具 举报

ID:893765 发表于 2021-6-12 19:12 | 显示全部楼层
名字不是重点 发表于 2021-6-12 00:12
呵呵。。。太晚了,睡了吗?
你都知道报错led未定义了,你就不会把
STB=0;

初始化串口方式为方式0 用查询方式,禁止串口中断 数据送入发送缓冲区
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表