sao mạch ko chay j cả nhi ???? 2 LED 7 thanh hiện 2 số 0 tròn trĩnh
Thông báo
Collapse
No announcement yet.
viết Function có chức năng như hàm DA( trong ASM) trong C cho 8051
Collapse
X
-
- Giả sử giá trị cần hiển thị của bạn là 35.sau khi xử lý P0 thì làm thế nào để 4 bit cao của P0 mang ja' trị 3, 4 bit thấp mang ja' tri 5
+bạn tách hàng đơn vị bằng lệnh: hangdonvi = 35%10 như thế thì hangdonvi của bạn chứa giá trị 5 = 0b00000101 nằm ở 4 bít thấp.
+Bạn tách hàng chục bằng lệnh: hangchuc = 35/10 như thế hangchuc của bạn chứa giá trị 3 = 0b00000011 nằm ở bốn bít thấp. Bạn muốn nó nằm ở 4 bít cao để đưa ra port thì bạn dịch trái hangchuc đi 4 bít bằng câu lệnh: hangchuc = hangchuc << 4; lúc này hàng chục của bạn có giá trị là 0b00110000.
+Tiếp theo bạn dùng phép or hàng chục với hàng đơn vị để out dữ liệu ra port một lượt bằng lệnh: giatrihienthi = hangchuc | hangdonvi; = 00110101
- Một đoạn chương trình mẫu thế này:
Thân mến,...
unsigned char hangchuc, hangdonvi, giatrihienthi;
...
void xuly (unsigned char byte)
{
hangchuc = byte/10;//tách lấy hàng chục
hangchuc = hangchuc << 4;//chuyển 4 bít thấp của hàng chục thành 4 bít cao
hangdonvi = byte%10;//tách lấy hàng đơn vị
giatrihienthi = hangchuc | hangdonvi;//or hai số với nhau để lấy giá trị hiển thị
}For a better world
Comment
-
chương trình của mình vừa viết đây
trình dịch nó báo lỗi thế này bạn à:#include <REGX51.H>
#include <AT89X51.H>
unsigned char hangchuc,hangdonvi,giatrihienthi;
void delay()
{
int i;
for(i=0;i<20;i++)
{ //50000 x 20 = 1s
TH0=0x3c; //-50000 us
TL0=0xb0;
TR0=1;
while(!TF0); //cho timer0 tràn
TF0=TR0=0;
}
}
void xuli(unsinged char byte)
{
hangchuc=(byte/10);
hangdonvi=(byte%10);
hangchuc=hangchuc<<4;
giatrihienthi=hangchuc|hangdonvi;
}
void main(void)
{
int a;
TMOD=0x01;
a=35;
While(1)
{
xuli(a);
P0=giatrihienthi;
Delay();
a=a-1;
}
}|
Comment
-
Đây là chương trình mẫu mà tôi viết theo phần cứng mà bạn thiết kế, bạn thử xem nhé:
- Bạn chú ý khi sử dụng Keil C. Khi bạn tạo project, bạn chọn loại VDK nào thì khi include tệp tiền xử lý, bạn phải include đúng tệp tương ứng với loại VDK đó.//gọi tệp tiền khai báo
#include <at89x52.h>
//khai báo các biến toàn cục
unsigned char hangchuc, hangdonvi, n, count;
//Tiền khai báo các hàm con
void InitSystem ();
void Display();
//Chương trình chính
void main ()
{
InitSystem();//khởi tạo
while (1)
{
if (n == 10)//Đếm số vòng lặp while, khi đủ 10 vòng thì mới
//giảm giá trị một lần
{
n = 0;
if (count == 0)//Nếu giảm về 0 thì quay lại 35
{
count = 35;
}
count--;
Display();//Gọi xử lý và out dữ liệu
}
}
}
void InitSystem ()
{
n = 0;
count = 35;
}
void Display()
{
hangdonvi = count%10;//Tách hàng đơn vị
hangchuc = count/10;//Tách hàng chục
hangchuc = hangchuc << 4;//Đưa 4 bít thấp lên 4 bít cao
P0 = hangchuc | hangdonvi;//Out ra cổng
}
- Khi sử dụng một hàm con, ngoài việc định nghĩa hàm, bạn phải khai báo nó ở đầu chương trình.
- Khi sử dụng một biến, thì cần phải khai báo trước, nếu không trình dịch nó sẽ báo lỗi.
Thân mến,For a better world
Comment
-
- Tôi mới xem lại cái mạch phần cứng bạn thiết kế. Có lẽ bạn dùng proteus để mô phỏng cho nên cái mạch của bạn mới chạy được. Nếu làm thực tế thì nó không chạy được đâu. Để VXL hoạt động được thì có 4 yếu tố cần phải đảm bảo:
- Nguồn phải tốt, 80 % các lỗi xảy ra là do nguồn
- Mạch Reset nối đúng.
- Mạch dao động nối đúng
- Chân EA nối đúng. Chân EA nếu nối với nguồn thì VDK sẽ sử dụng bộ nhớ chương trình bên trong, còn nối đất thì VDK sử dụng bộ nhớ chương trình ngoài.
Trong thiết kế của bạn, không có nối mạch reset, và EA nối đất mà không có bộ nhớ ngoài thì chắc chắn không hoạt động được.
Thân mến,For a better world
Comment
-
- Đối với thiết kế của bạn dùng 7447 cũng được, nhưng không cần thiết phải sử dụng đến 2 con đâu. Chỉ cần sử dụng 1 con thôi, hiển thị cho nhiều LED 7 thanh cũng được. Dùng phương pháp quét.
- Phần cứng: Bạn bỏ một con đi, nối chung dữ liệu của 2 con LED 7 thanh vào đầu ra của một con 7447. Đầu vào của 7447 nối với 4 bít thấp của 7447. Nguồn của mỗi LED 7 thanh thì được cấp qua 1 con trans (A564,A1015,A1013...). Tín hiệu điều khiển mở các trans này lấy từ 2 chân nào đó của VDK, giả sử p2.0, p2.1
- Chương trình bạn có thể thực hiện như sau:
Thân mến,//Gọi tệp tiền xử lý
#include <at89x52.h>
//Định nghĩa các tên cho chương trình sáng sủa
#define DULIEU P0
#define DIGIT1 P2_0
#define DIGIT2 P2_1
//Khai báo biến toàn cục
unsigned char hangchuc, hangdonvi, n, count;
//Tiền khai báo các hàm con
void InitSystem ();
void Display();
void Delay(unsigned int n);
//Chương trình chính
void main ()
{
InitSystem();
while (1)
{
if (n == 1)
{
n = 0;
if (count == 0)
{
count = 35;
}
count--;
Display();
}
}
}
void InitSystem () //Khởi tạo
{
n = 0;
count = 35;
}
void Display()
{
hangdonvi = count%10;//Tách chữ số hàng đơn vị
hangchuc = count/10; //Tách chữ số hàng chục
DULIEU = hangdonvi; //out dữ liệu của chữ số hàng đơn vị ra
DIGIT1 = 0; //Bật nguồn của LED hàng đơn vị
Delay(10); //Cho sáng trong thời gian delay
DIGIT1 = 1; //Tắt LED hàng đơn vị đi
DULIEU = hangchuc;//Out dữ liệu của chữ số hàng chục ra
DIGIT2 = 0;//Bật nguồn cho LED hàng đơn vị sáng
Delay(10); //[I]Cho sáng trong thời gian delay [I]
DIGIT2 = 1;//Tắt LED hàng chục đi
}
void Delay(unsigned int n)
{
unsigned int i,j;
for (i=0;i<n;i++)
for (j=0;j<100;j++);
}For a better world
Comment
-
có lẽ mình vẫn dùng 2 con 7447 bạn à
n mà ko hiểu sao dùng cái code bạn viết cho mình mạch thật lẫn giải lập đều ko chạy...mặc dù mình thấy đúng. DÙ sao bạn cũng đã jair đáp cho mình cái thắc mắc này
có lẽ mình phải làm lại dần dần trên mạch thật để kiểm tra xem saoP0 = hangchuc | hangdonvi;
mình dùng con AT89C51 màbạn phải include đúng tệp tương ứng với loại VDK đó
đúng rồi, chỗ đó mình nhầm đó, mạch thật cảu mình thì EA cũng nối VCC màChân EA nếu nối với nguồn thì VDK sẽ sử dụng bộ nhớ chương trình bên trong
mạch Reset và dao động cũng ok rồi....có lẽ lai do dây rựa lằng nhằng quá ..lắp bảng trắng mà cứ để trong cặp nó lại móp hết dây dựa---> có khi mai mình fải đi lại dây rồi làm từ đơn jản trước đã..chứ bụp một cái ko biết hỏng chỗ nào . DÙ sao cũng cám ơn bạn Toan.Lv
còn fải nhờ vả ae nhiều
Last edited by machithanh; 05-05-2009, 22:01.|
Comment
Bài viết mới nhất
Collapse
-
bởi IemanjaTôi có một câu hỏi kỹ thuật muốn hỏi.
Động cơ bước vòng kín của tôi được sử dụng trong một cơ cấu dao động đảo chiều thường xuyên. Sau khi hoạt động vài ngày, vị trí điểm 0 của bộ mã hóa được thiết lập ban đầu bị trôi dần, và...-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 14:12 -
-
bởi theidiotcatGiải pháp cấu hình tối ưu chi phí và hiệu năng cho phòng net hiện đại với AMD Ryzen 7 5700G, 5700X và Radeon RX 6500XT, 7600 8GB
Giải pháp toàn diện cho bài toán đầu tư phòng net
Mô hình phòng net hiện đại ngày nay đòi hỏi...-
Channel: Đánh giá sản phẩm DTVN
Hôm qua, 13:55 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi lvhnE nhớ bác Vivanpham làm bên điện tử y sinh, có lần đó cái sơ đồ máy chụp x quang sao có mấy con thryristor làm gì mà ko ai trả lới đúng cả
...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 09:17 -
-
Trả lời cho Amply bị rò DC 22 voltbởi lvhnBác kiểm tra lại đường mạch, mối hàn xem có bị hở hoặc dẫn không tốt không?
Thay cầu diode lớn hơn càng tốt không vấn đề gì cả....-
Channel: Điện thanh
Hôm qua, 09:12 -
-
bởi LantheChào bạn.
Trục đầu ra của hộp số hành tinh xoắn ốc được kết nối với mặt bích của khách hàng thông qua một trục răng trong. Sau chưa đầy sáu tháng hoạt động, nó phát ra tiếng kêu lách cách và độ rơ lớn đáng báo động.
Việc...-
Channel: Thiết bị điện tử cá nhân
06-08-2026, 13:05 -
-
bởi ittcChào các anh em nhé, mình dự định sắp tới sẽ đi học lái xe Ôtô, thi lấy bằng lái. Cụ thể mình sẽ học và thi lấy giấy phép lái xe hạng B. Thật sự mình là người chưa có kiến thức hiểu biết gì về Ôtô cả ? tất nhiên mình sẽ phải...
-
Channel: Tâm tình dân kỹ thuật
06-08-2026, 06:22 -
-
Trả lời cho Amply bị rò DC 22 voltbởi trung30000Theo sự hướng dẫn của bác, sau khi em kiểm tra tầng Vi sai sử dụng cặp c1815, tiếp đến là 1 con a1013, và cặp thúc sử dụng mje304g và mje305g, em đã tiến hành thay cặp Vi sai c1815 sau đó mở máy lên đo ngõ công suất DC 0,2V hai giây sau máy đo...
-
Channel: Điện thanh
05-08-2026, 20:09 -
-
bởi theidiotcatBộ máy đa năng toàn diện cho học tập và làm việc hàng ngày
Đối với học sinh, sinh viên và người làm việc văn phòng, việc sở hữu một bộ PC cân bằng giữa học tập, công việc và giải trí là nhu cầu vô cùng thực tế. Combo Ryzen...-
Channel: Đánh giá sản phẩm DTVN
05-08-2026, 10:28 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi mèomướpDạ cháu đọc 1 số bài viết của bác vi... thì nhớ đc bác là 1 cụ già gần 80 tuổi, sức khỏe yếu. Đam mê và làm vc về kỹ thuật điện. Thích thơ ca. Có nhìu bài chia sẻ quý báu cho thế hệ sau. Tuy nhiên già rồi nên khái tính, bảo thủ, nhưng vẫn đáng kính ạ... còn lão nhathung... thì kiểu bố đời
-
Channel: Tâm tình dân kỹ thuật
31-07-2026, 12:52 -
-
bởi lvhnHãng nào tùy thích thôi bác! bây giờ các hãng đều hỗ trợ xem qua máy tính hay điện thoại đều được. Gắn Trước tiên mua về cắm nguồn set ip hết xong hãy lắp lên, cam poe chỉ cần 4 lõi là hoạt động bình thường nên 1 dây kéo cho 2 cam vẫn ok
-
Channel: Tâm tình dân kỹ thuật
30-07-2026, 15:49 -

Comment