A. 51單片機如何修改波特率9600改成2400
用下面公式重新計算用於產生波特率的定時器重載值:
設9600波特率時定時器重載值是X;
設2400波特率時定時器重載值是Y;
當定時器重載值是8bit時(傳統的51單片機型號,如AT89C51的T1):
Y=256-((256-X)*4)
當定時器重載值是16bit時(較新的51單片機型號,如C8051F系列的Timer3):
Y=65536-((65536-X)*4)
//-----------------------------------------------
粗略看了一下你的程序,你可以調整一下MAX_DELAY這個參數。我沒具體計算過,只是懷疑是不是波特率降低之後,發送數據的時間變長了,如果發送數據的時間超過MAX_DELAY就會發送錯誤。
僅供參考。
B. 問一下51單片機能不能改成電源模塊
看你這開發板是用USB線連接電腦,用USB取電並燒錄程序。如果用電腦燒錄程序以後,是可以用5Ⅴ電源模塊供電,但應該是手機充電器的那種電源模塊,插上USB線就供電了。你買其他類型的5V電源模塊用不上。其實,用不著另買電源模塊,肯定有手機充電器,用充電器就行的。買的電源模塊沒有USB口反倒不能用。但是,燒錄程序時還必須用電腦。
C. 51單片機改io口
51的IO 很特別,屬於SFR,不能直接或者間接定址,所以不能像寄存器那樣隨意調換順序。要麼在定義的時候修改,要麼使用以個介面函數,在介面函數中實現IO的兌換,這個函數可以接受參數什麼的,可以做的比較人性化。
D. 51單片機程序修改
現在,你顯示的是num1,其范圍是0~60。
可以把它的上限,改為30,這就符合你的要求了。
另外再增加一個變數num2,其范圍是0~60。
用它來控制紅綠黃的交替變化,即可。
voiddisplay(ucharge,ucharshi)
{
if(num2<=25){P1=0xfe;}
elseif(num2<=30){P1=0xff;delay(2);P1=0xfd;}
elseif(num2<=60){P1=0xfb;}
……
}
……
voidtime0()interrupt1
{
TH1=(65536-5000)/256;//--應該是TH0=...
TL1=(65536-5000)%256;//--應該是TL0=...
num++;
if(num==10){
num=0;
num1++;
if(num1==30)num1=0;//用於顯示秒數
shi=num1/10;
ge=num1%10;
num2++;
if(num2==60)num2=0;//用於控制變換
}
}
E. 51單片機數字電壓表P0口改到P1口程序怎麼改
delay(1);
EN=1;//拉高使能端,為製造有效的下降沿做准備。
delay(1);
EN=0;//en由高變低,產生下降沿,液晶執行命令。
}
void write_1602dat(uchar dat)//液晶寫入數據函數
{
RS=1;//數據/指令選擇置為數據
P0=dat;//送入數據 *******************************這個我改成了P1
delay(1);
EN=1; //en置高電平,為製造下降沿做准備。
delay(1);
EN=0; //en由高變低,產生下降沿,液晶執行命。
}
void lcd1602_init()//液晶初始化函數
{
uchar a;
RW=0;
write_1602com(0x38);//設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數據。
write_1602com(0x0c);//開顯示不顯示游標
write_1602com(0x06);//整屏不移動,游標自動右移。
write_1602com(0x01);//清顯示
write_1602com(0x80);//顯示固定符號從第一行第0個(從第0個開始數)位置開始顯示
for(a=0;a<4;a++)
{
write_1602dat(tab1[a]);//向液晶屏寫固定符號部分
}
write_1602com(0x80+9);//顯示固定符號寫入位置,從第一行第9個(從第0個開始數)位置開始顯示。
for(a=0;a<8;a++)
{
write_1602dat(tab2[a]);//寫顯示固定符號
}
}
/*************轉速顯示函數**********/
void display(unsigned long speed)//轉速顯示函數
{
if(speed<=99999)
{
uchar wan,qian,,shi,ge;//定義拆字變數
wan=speed/10000;//轉速/10000得到萬位
qian=speed%10000/1000;//轉速/10000的余數/1000得到千位