anh em giúp t cái mạch đếm xung đầu vào với, làm mãi mà không được, đây có cả mạch mô phỏng và code nữa, anh em sửa hộ t với.
Thông báo
Collapse
No announcement yet.
lại là đếm xung dùng 89C51
Collapse
X
-
ui quên mất, đây là code của em:
#include <AT89X51.H>
#include <math.h>
#define clin P0_0
#define a P1_0
#define b P1_1
#define c P1_2
#define d P1_3
#define led1 P1_4
#define led2 P1_5
#define led3 P1_6
#define clock P1_7
void delay(unsigned char ms)
{
int i,j;
for(i=1;i<=ms;i++)
for(j=1;j<=120;j++)
{;}
}
void LUA_CHON_SO(unsigned char SO)
{
switch(SO)
{
case 1:
a=1;
b=c=d=0;
break;
case 2:
a=c=d=0;
b=1;
break;
case 3:
a=b=1;
c=d=0;
break;
case 4:
c=1;
a=b=d=0;
break;
case 5:
a=c=1;
b=d=0;
break;
case 6:
b=c=1;
a=d=0;
break;
case 7:
d=1;
a=b=c=0;
break;
case 8:
a=d=1;
b=c=0;
break;
case 9:
a=b=d=1;
c=0;
break;
case 0:
a=b=c=d=0;
break;
default: a=b=c=d=0;break;
}
}
void HIENTHI(unsigned char led,SO)
{
if(led==1)
{led1=1;led2=led3=0;}
else if(led==2)
{led1=led3=0;led2=1;}
else if(led==3)
{led1=led2=0;led3=1;}
LUA_CHON_SO(SO);
}
void dem_xung(unsigned char dem)
{
if(clock==1) {delay(100);if(clock==0) {dem=dem+1;};}
if(dem==10) {dem=0;};
}
void dem_giay(unsigned char dem)
{
if(dem==0) HIENTHI(3,0);delay(100);
if(dem==1) HIENTHI(3,1);delay(100);
if(dem==2) HIENTHI(3,2);delay(100);
if(dem==3) HIENTHI(3,3);delay(100);
if(dem==4) HIENTHI(3,4);delay(100);
if(dem==5) HIENTHI(3,5);delay(100);
if(dem==6) HIENTHI(3,6);delay(100);
if(dem==7) HIENTHI(3,7);delay(100);
if(dem==8) HIENTHI(3,8);delay(100);
if(dem==9) HIENTHI(3,9);delay(100);
dem_xung(dem);
}
main(unsigned char dem)
{
dem_xung(dem);
dem_giay(dem);
}
Comment
-
t đa viết code hiển thị trên lcd khác cậu hiển thị trên led 7 đoạn.nhưng chỉ khác nhau phân hiển thị thôi.còn phần đo giống nhau.đây là code t viết về đo tần số ở 3 dải tần hiển thị lcd.các bạn xem và góp ý nhé:
#include <REGX52.H>
#include <stdio.h>
////////////////////
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;
sbit xd=P3^6;
sbit abc=P3^4;
////////////////////
char x;
//int daitan=1;
char so[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x3 9};//ma ANCII cua cac so tu 0 den 9
void delay_01s(int a) //so giay tre = 0.1s*a
{
int i,j;
TMOD=0x15;
for(j=0;j<a;j++)
{
for(i=1;i<=2;i++)
{
TH1=-50000/256;
TL1=-50000%256;
TR1=1;
while(!TF1);
TR1=TF1=0;
}}
}
/////////////////////
void delay(unsigned long int t)
{
unsigned long int i;
for(i=0;i<t;i++);
}
/////////////////////
void busy_flag(void) //kiem tra co ban cua LCD
{
P0=0xff;
RS=0;
RW=1;
do
{
EN=1;
delay(10);
EN=0;
x=P0;
x=x&0x80;//neu x != 0x80 thi x = x&0x80=0
//neu x = 0x80 thi x = x&0x80 = 0x80
}
while(x==0x80);//cho den khi x != 0x80
}
/////////////////////////
void write_command(unsigned char LCD_command)//ghi ma lenh
{
busy_flag();
P0=LCD_command;
RS=0;
RW=0;
EN=1;
delay(50);
EN=0;
delay(50);
}
/////////////////////////
void write_data(unsigned char LCD_data)//ghi du lieu(tung ky tu don le)
{
busy_flag();
P0=LCD_data;
RS=1;
RW=0;
EN=1;
delay(50);
EN=0;
delay(50);
}
//////////////////////////////
void write_string(char *s)//ghi chuoi ky tu
{
while(*s)
{
write_data(*s);
s++;
}
}
//////////////////////////////
void write_so_nguyen(int a)//hien thi so
{
int d=0,i;
char s[10];
if(a==0)
write_data(so[a]);
else
while(a!=0) //tach so can hien thi thanh cac so co 1 chu so dua vao mang s[]
{
s[d]=a%10;
a=a/10;
d++;
}
for(i=d-1;i>=0;i--) //ghi lan luot cac so ra man hinh
write_data(so[s[i]]);//so[s[i]] la cac ma ANCII tuong ung voi so s[i]
}
///////////////////////////////////////////
void init(void) //khoi tao LCD
{
write_command(0x01);//xoa man hinh
write_command(0x03);//
write_command(0x38);
write_command(0x06);
write_command(0x0c);
}
/////////////////////////////
int dotanso(int n) //dem xung trong mot khoan thoi gian nhat dinh phu thuoc vao n
//thoi gian dem = n * 0.1s
//do xung co tan so > 100 Hz
{
TMOD=0x15; //timer0 che do 1,dem xung ngoai
TH0=TL0=0; //xoa thanh ghi
TR0=1; //cho timer0 hoat dong
delay_01s(n);
TR0=0; //dung timer0
return (TH0*256+TL0)*10/n;//tra lai gia tri cua tan so da quy doi sang he thap phan
}
///////////////////////////////////////
unsigned int dotanso2(void)
{
IE=0x82;
TMOD=0x52;
TR1=0;
TR0=0;
TH1=TL1=0;
TH0=TL0=-50;
TR0=1;
while(abc==0);
while(abc==1);
TR1=1;
while(abc==0);
while(abc==1);
TR1=0;
TR0=0;
IE=0;
return (int)(100000/(TH1*256+TL1));
}
void ngatT0(void) interrupt 1
{
xd=~xd;
}
///////////////////////////////
///////////////////////////////
void main()
{
unsigned int f, dk;
delay(100);
init();
write_command(0x01);
write_command(0x80);
write_string("Tan so la:");
write_command(0xc5);
write_string("f=");
while(1)
{
dk=dotanso(1);
if(dk>=1000)
{
write_command(0xc7);
f=dk;
write_so_nguyen(f/1000);
write_string(".");
write_so_nguyen((f%1000)/100);
write_so_nguyen((f%100)/10);
write_string(" khz ");
}
else
{
dk=dotanso(10);
write_command(0xc7);
if(dk>=100||dk==0)
{
f=dk;
write_so_nguyen(f);
}
else
{
f=dotanso2();
write_so_nguyen(f/10);
write_string(".");
write_so_nguyen(f%10);
}
write_string(" Hz ");
}
}
}
Comment
Bài viết mới nhất
Collapse
-
bởi chinhnguyen9Công thức
Gain (dB) = 20 × log₁₀(A)
Thí dụ 1; 60dB
log₁₀(A)=60/20=3
⇒ A=V_out / V_in = 10³ = 1.000
Thí dụ 2; 100dB
log₁₀(A)=100/20=5
⇒ A=V_out / V_in = 105 = 100.000
Tí dụ 3; LM 358
Large Signal Open Loop Voltage Gain AVOL V/mV RL = 2.0...-
Channel: Hướng dẫn sử dụng diễn đàn
19-03-2026, 08:44 -
-
Trả lời cho Mạch 3s bị giảm điện áp đầu rabởi minhtri0405chả biết bạn xử lý được chưa , kích sạc hoặc điện áp > điện áp khối pin vào 2 chân P - P+ , nhiều mạch phải yêu cầu có kích lần đầu sau đó mới chạy...
-
Channel: Điện tử dành cho người mới bắt đầu
18-03-2026, 10:01 -
-
bởi minhtri0405đây có phải là 1 cách để test mosfet xịn hay dỏm khi mua đồ tàu không nhỉ , vì ko thể đập ra để coi lõi rồi trả hàng được....
-
Channel: Tâm tình dân kỹ thuật
18-03-2026, 09:57 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
16-03-2026, 18:05 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
16-03-2026, 18:04 -
-
bởi bqvietDiễn đàn vốn vắng, muốn vào viết bài trả lời chút nhưng cứ thấy luồng nào thành viên này mở thì cũng đồng thời xuất hiện ở Otofun, thế là chùn tay ... Thôi thì dientuvietnam không thể so sánh được về độ phổ cập, biết thân biết phận vậy.
-
Channel: Tâm tình dân kỹ thuật
16-03-2026, 17:49 -
-
bởi chinhnguyen9So sánh sóng 2 mạch nguồn Push-pull
· Sóng vuông giửa 2 cực D của mạch Pushpull trong module inverter 24-220V sine giả của TQ. Mạh điện này khá đặc biêt ở chổ, không thấy mạch snubber mà hiêu quả triêt sóng hài quá tốt dù hoạt...-
Channel: Nguồn!
16-03-2026, 14:27 -
-
bởi chinhnguyen9Mạch điên bếp tù gộm 2 khối:
Khối điêu khiển:
-Thiết lập công suất nấu
-Thiết lập thời gian nấu
-Kiểm tra có đặt nồi hay không, đúng loại hay không?
-Có quá nhiệt không?
Khối công suất:
- Nắn+ lọc điên AC ra 310VDC +loọc nhiểu...-
Channel: Hướng dẫn sử dụng diễn đàn
16-03-2026, 14:05 -

Comment