|
50黑幣
各位大佬好,目前我需要實(shí)現(xiàn)的功能是通過(guò)51單片機(jī)對(duì)方波脈沖進(jìn)行計(jì)數(shù)這是方波的發(fā)生電路:
111111111.png (18.69 KB, 下載次數(shù): 57)
下載附件
2022-2-26 17:59 上傳
333333333333.png (19.46 KB, 下載次數(shù): 62)
下載附件
2022-2-26 17:59 上傳
這是產(chǎn)生的波形,方波峰值分別為-0.68V和3.24V:
2222222222222.jpg (63.3 KB, 下載次數(shù): 67)
下載附件
2022-2-26 17:57 上傳
這是單片機(jī)連接圖,這里我選擇P3.4/T0口作為輸入方波的端口:
444444444444.png (44.25 KB, 下載次數(shù): 55)
下載附件
2022-2-26 18:12 上傳
但當(dāng)我把方波產(chǎn)生電路的輸出端和單片機(jī)連接時(shí),輸出端的電平會(huì)被單片機(jī)拉高并且保持在3.38V左右:
6666666666.png (41.1 KB, 下載次數(shù): 62)
下載附件
2022-2-26 18:16 上傳
55555555.png (18.59 KB, 下載次數(shù): 60)
下載附件
2022-2-26 18:14 上傳
這種情況下方波電路似乎就失效了,我不太明白為什么會(huì)導(dǎo)致這種結(jié)果,希望各位大佬能夠幫我解答疑惑,謝謝。

代碼如下,由于電壓?jiǎn)栴}未解決,代碼還沒(méi)有完善:
/*************** writer:shopping.w ******************/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define DATA P1
sbit OE = P2^5;
sbit EOC = P3^3;
sbit ST = P2^7;
sbit C1 = P3^0;
sbit C2 = P3^1;
sbit C3 = P3^2;
sbit OUT1 = P3^7;
sbit IN1 = P3^4;
uint display_data = 0; /*顯示數(shù)據(jù)*/
uchar code LEDData[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
uint count = 1;
//void T0Init()
//{
// TMOD=0x05;
// TH0=0XFF;
// TL0=0xFD;
// EA=1;
// ET0=1;
// TR0=1;
//}
void DelayMS(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void Display_Result(uint d)
{
P2 = 0xf7;
P0 = LEDData[d%10];
DelayMS(5);
P2 = 0xfb;
P0 = LEDData[d%100/10];
DelayMS(5);
P2 = 0xfd;
P0 = (LEDData[d/100]| 0x80);
DelayMS(5);
P2 = 0xfe;
P0 = LEDData[0];
DelayMS(5);
}
void main()
{
// T0Init();
C1 = 1;
C2 = 1;
C3 = 0;
OUT1 = 0;
IN1=1;
while(1)
{
OUT1 = ~OUT1;
ST = 0;
ST = 1;
ST = 0;
while(EOC == 0);
OE = 1;
display_data = ((5.0/255) * DATA) * 100;
//Display_Result(display_data);
Display_Result(count);
OE = 0;
//count = count+1;
}
}
//void T0_time() interrupt 1
//{
// count = count+1;
// TH0 = 0XFF;
// TL0 = 0XFD;
//}
|
|