名字不是重点 发表于 2021-6-12 00:12 初始化串口方式为方式0 用查询方式,禁止串口中断 数据送入发送缓冲区 |
田所浩二单推人 发表于 2021-6-11 22:46 呵呵。。。太晚了,睡了吗? 你都知道报错led未定义了,你就不会把 STB=0; uchar led=0xfe; 这两行对调一下顺序? 还有,你知道SCON、ES、SBUF这些专用寄存器和标志位有正确用途吗? 照葫芦画瓢了,还能画出个南瓜来。 太晚了,睡吧,明天还在上班,歹命啊! |
名字不是重点 发表于 2021-6-11 12:16 #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未定义 |
名字不是重点 发表于 2021-6-11 08:59 #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) |
| 是4094未认真读通。 |
田所浩二单推人 发表于 2021-6-10 18:13 这样当然不行啦! 4094的手册你看过了吗?数据移位的基本条件是CLK的的上跳变。 “在CLK的上升沿,把SDA上的数据移入”,你看你的代码有做到了吗? 你要把8bit的数据拆开一位一位在从SDA口发出,同时CLK也要做相应的上、下跳变。CLK是什么?就是时钟信号,在传输SDA时要有相应的、变化高低的。你的代码中光有SDA变化不够的。 再努努力,你就要成功了。+U! |
|
#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); } } 仿真只有第一盏灯亮 |
|
你要解决的问题有3: 1、通IO口,把数据发送出去; 2、4094的驱动; 3、流水灯的流水方式。 |
| 删除本帖 |