![]() |
名字不是重點 發(fā)表于 2021-6-12 00:12 初始化串口方式為方式0 用查詢方式,禁止串口中斷 數(shù)據(jù)送入發(fā)送緩沖區(qū) |
田所浩二單推人 發(fā)表于 2021-6-11 22:46 呵呵。。。太晚了,睡了嗎? 你都知道報錯led未定義了,你就不會把 STB=0; uchar led=0xfe; 這兩行對調一下順序? 還有,你知道SCON、ES、SBUF這些專用寄存器和標志位有正確用途嗎? 照葫蘆畫瓢了,還能畫出個南瓜來。 太晚了,睡吧,明天還在上班,歹命啊! |
名字不是重點 發(fā)表于 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未定義 |
你不要用串口來發(fā)數(shù)據(jù)啊。。 void LED_OUT(uchar data) //這是發(fā)送一個字節(jié)(8位)數(shù)據(jù)的函數(shù),給你參考一下。 { uchar i; for(i=8;i>=1;i--) { sda= (data &0x80) data <<=1; sck= 0; sck= 1; } } |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎勵! |
名字不是重點 發(fā)表于 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未認真讀通。 |
田所浩二單推人 發(fā)表于 2021-6-10 18:13 這樣當然不行啦! 4094的手冊你看過了嗎?數(shù)據(jù)移位的基本條件是CLK的的上跳變。 “在CLK的上升沿,把SDA上的數(shù)據(jù)移入”,你看你的代碼有做到了嗎? 你要把8bit的數(shù)據(jù)拆開一位一位在從SDA口發(fā)出,同時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口,把數(shù)據(jù)發(fā)送出去; 2、4094的驅動; 3、流水燈的流水方式。 |
刪除本帖 |
Powered by 單片機教程網(wǎng)