Sửa Code đo Tốc độ động Cơ Dùng 8051 Hiênt Thị LCD Em Với

  • Đăng ký hoặc đăng nhập
    • Logging in... Ghi Nhớ? Ðăng Nhập Forgot password or user name? hoặc Đăng ký
    • Log in with Facebook
  • Nếu đây là lần đầu tiên đến với Điện Tử Việt Nam, bạn có thể đọc phần Hỏi đáp bằng cách nhấn vào liên kết. Có thể bạn cần đăng kí trước khi có thể gửi bài . Để bắt đầu xem bài viết, chọn diễn đàn bạn muốn thăm dưới đây.
Thông báo Collapse No announcement yet. Sửa code đo tốc độ động cơ dùng 8051 hiênt thị LCD em với Collapse X Collapse
  • Bài viết
  • Hoạt động gần đây
  • Tìm kiếm
  • Trang of 2
  • Lọc
  • Giờ All Time hôm nay Last Week Last Month
  • Show All Discussions only Photos only Videos only Links only Polls only Events only
Filtered by: Clear All new posts Trước 1 2 template Next
  • thanghiephoa thanghiephoa Thành viên mới
    • Tham gia: Sep 2009
    • Bài viết: 7
    • Share
    • Tweet
    #1

    Sửa code đo tốc độ động cơ dùng 8051 hiênt thị LCD em với

    15-10-2009, 10:10 Em sửa mãi mà không ra xin mấy pro giúp em với ạ : #include<regx52.h> #include<stdio.h> unsigned int soxung; float tocdo; unsigned char dem; sbit RS =P1^0; sbit RW =P1^1; sbit EN =P1^2; char x; void delay(unsigned long int t) { unsigned long int i; for (i=0;i<n;i++) } void busy(void) { p2=0xff; RS=0; do {EN=1; //k cho fep tin hieu vao LCD delay(10); En=0; x=p2; x=x&0x80; } while (x!=0x80) } void ghilenh(unsigned char lenh) { busy(); p2=lenh; RS=0; RW=0;EN=1; delay(50); } void ghidulieu(unsigned char data) { busy(); p2=data; RS=1; RW=0; EN=1; delay(50); EN=0; delay(50); } void ghikytu(char *s) {while(*s) {ghidulieu(*s); s++; } } void hienthi(int data) {if (data<10) ghidulieu(data); if (data<100) { ghidulieu(data/10); data=data%10; ghidulieu(data); } if (data<1000) { ghidulieu(data/100); data=data%100; ghidulieu(data/10); data=data%10; ghidulieu(data); } if (data<10000) { ghidulieu(data/1000); data=data%1000; ghidulieu(data/100); data=data%100; ghidulieu(data/10); data=data%10; ghidulieu(data); } } void khoitaoLCD(void) { ghilenh(0x03); ghilenh(0x38); ghilenh(0x06); ghilenh(0x0e); } void ngatngoai0() interrupt 0 {dem++; if (dem==20) {dem=o;TH0=0; tocdo=soxung/100; soxung=0; TH0=-50000/256; TL0=-50000/256; }} void ngatngoai1() interrupt 2 { soxung++; } voi main() {TMOD=0x21; TL1=TH1=-3;TH0=-50000%256; TL0=-50000%256; SCON=0X52; IT1=1; IR1=0X85 //NGAT NGOAI 0 & 1 dem=0; khoitaoLCD(); while(1) {ghidulieu(0x01); ghidulieu(0x08); ghikytu(vantoc:v/s); hienthi(soxung); soxung=0; tocdo=0; TR0=1;//cho fep timer hoat dong } } Tags: None
  • dochetdam dochetdam Thành viên mới
    • Tham gia: Sep 2009
    • Bài viết: 27
    • Share
    • Tweet
    #2 15-10-2009, 10:59 void ngatngoai0() interrupt 0 {dem++; if (dem==20) {dem=o;TH0=0; tocdo=soxung/100; soxung=0; TH0=-50000/256; TL0=-50000/256; }} it nhất cũng có lỗi ở đây chương trình hiển thị rườm rà khó kiểm soát

    Comment

    Gửi bài viết Huỷ bỏ
  • thanghiephoa thanghiephoa Thành viên mới
    • Tham gia: Sep 2009
    • Bài viết: 7
    • Share
    • Tweet
    #3 15-10-2009, 21:30 anh ơi! " dem=0" là sau khi hết 0.1 giây thì bắt đầu đếm lại từ đầu mà

    Comment

    Gửi bài viết Huỷ bỏ
  • thanghiephoa thanghiephoa Thành viên mới
    • Tham gia: Sep 2009
    • Bài viết: 7
    • Share
    • Tweet
    #4 15-10-2009, 21:32 bài này em dùng encoder 100 xung/vong dùng 8051 điều khiển,và dùng bộ ngắt ngoài 0 và 1 ạ

    Comment

    Gửi bài viết Huỷ bỏ
  • dochetdam dochetdam Thành viên mới
    • Tham gia: Sep 2009
    • Bài viết: 27
    • Share
    • Tweet
    #5 16-10-2009, 12:34 void ghidulieu(unsigned char data) { busy(); p2=data; RS=1; RW=0; EN=1; delay(50); EN=0; delay(50); } chương trình của bạn có quá nhiều lỗi bạn không thể giải quyết được là đúng thôi, phần hiển thị dùng phương pháp tra bảng chứ không ai làm như bạn cả, tim thêm trên diễn đàn đi nhé

    Comment

    Gửi bài viết Huỷ bỏ
  • dochetdam dochetdam Thành viên mới
    • Tham gia: Sep 2009
    • Bài viết: 27
    • Share
    • Tweet
    #6 16-10-2009, 12:37 đặt tên không được trùng với tù khóa của C, ngắt cũng có lỗi, túm lại là bạn viết chương trình như thế không ai muốn đọc cả, học hỏi cách viết chương trình từ các anh trên diễn đàn đi

    Comment

    Gửi bài viết Huỷ bỏ
  • Multi System Multi System Thành viên tích cực
    • Tham gia: Feb 2008
    • Bài viết: 671
    • Share
    • Tweet
    #7 16-10-2009, 12:58 Viết sai cú pháp nhiều quá. Khi biên dịch thấy thông báo lỗi nào thì kick đôi vào dòng thông báo đó, con trỏ sẽ nhảy lên dòng có lỗi và xem lỗi vì sao và sửa nó. Một số lỗi nhìn qua sẽ thấy này: - Hàm delay có biến n chưa định nghĩa - Tên thanh ghi Port là P2 chứ ko phải là p2 - Ở trên đã định nghĩa EN thì ở dưới cũng phải là EN, chứ không phải là En - Biến dem = 0; chứ không phải dem = o; - IR1 là cái gì vậy ?

    Comment

    Gửi bài viết Huỷ bỏ
  • thang_tdh thang_tdh Thành viên mới
    • Tham gia: Nov 2011
    • Bài viết: 3
    • Share
    • Tweet
    #8 09-11-2011, 18:51 ai sưa cho e cái code này với !em thử mãi rùi mà vẫn chưa chạy #include <reg52.h> #include <intrins.h> #include <stdio.h> #include <string.h> #include <stdlib.h> unsigned long int n,dem; double vong_giay; //=======khai bao chan LCD=========== sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; //=======Ham tao tre============ void delay_ms(int n) { int k ,j; for(k=0;k<n;k++) { for(j=0;j<500;j++); } } //========Ham ghi lenh len LCD========= void LCD_dieukhien(unsigned char x) { RS=0; //thanh ghi lenh RW=0; //chon che do ghi P1 =x; EN=1; EN=0; //tin hieu cho phep delay_ms(5); } //========Ham ghi 1 ki tu len LCD======= void LCD_ghi_dulieu(unsigned char y) { RS=1; //thanh ghi du lieu RW=0; //che do ghi P1=y; EN=1; EN=0; //tin hieu cho phep delay_ms(5); } //===========Setup LCD ban dau=============== void LCD_caidat() { LCD_dieukhien(0x38); // DL = N =F =1 che do 8 bit du lieu, 2 dong, font 5*10 LCD_dieukhien(0x0C); // D=1 bat hien thi, C=B=0 tat con tro LCD_dieukhien(0x06); // i/d = 1 ,s =0 ko dich con tro va dich hien thi LCD_dieukhien(0x01); // xoa man hinh dua con tro ve vi tri dau delay_ms(15); } //=======Ham ghi 1 chuoi ki tu len LCD========= void LCD_chuoi(unsigned char *s) { while (*s) { LCD_ghi_dulieu(*s); s++; } } void Hienthi_LCD(unsigned char t) { unsigned char v; if(t<10) { LCD_ghi_dulieu(t+48); //doi sang ASCII } else if(t<100) { LCD_ghi_dulieu(t/10+48); //so hang chuc LCD_ghi_dulieu(t%10+48); //so hang don vi } else { v=t/10; LCD_ghi_dulieu(v/10+48); // so hang tram LCD_ghi_dulieu(v%10+48); //so hang chuc LCD_ghi_dulieu(t%10+48); //so hang don vi } } //======Loi chao dau chuong trinh====== void main(void) { TMOD=0X15;//timer 0 che do dem xung,timer 1 o che do 1 16bit IE=0X88;//cho phep ngat IP=0X08;//uu tien ngat timer 1 TH1=9216/256;//T trich mau 10ms TL1=9216%256; TR0=TR1=1; LCD_caidat(); while(1) { LCD_dieukhien(0x80); //dua con tro LCD ve dau hang 1 LCD_chuoi(":"); Hienthi_LCD(vong_giay); LCD_dieukhien(0xC0); //dua con tro ve dau hang 2 LCD_chuoi("BAI TAP LON VDK"); //dua chuoi chu len LCD delay_ms(500); LCD_dieukhien(0x01); //xoa man hinh } } void ngatT1(void) interrupt 3 { n=TH0*256+256*TL0; vong_giay=n;//xung encoder dem 100xung/vong }

    Comment

    Gửi bài viết Huỷ bỏ
  • tdm tdm Thành viên tích cực
    • Tham gia: Sep 2005
    • Bài viết: 349
    • Share
    • Tweet
    #9 10-11-2011, 13:01 Nguyên văn bởi thang_tdh Xem bài viết ai sưa cho e cái code này với !em thử mãi rùi mà vẫn chưa chạy #include <reg52.h> #include <intrins.h> #include <stdio.h> #include <string.h> #include <stdlib.h> unsigned long int n,dem; double vong_giay; //=======khai bao chan LCD=========== sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; //=======Ham tao tre============ void delay_ms(int n) { int k ,j; for(k=0;k<n;k++) { for(j=0;j<500;j++); } } //========Ham ghi lenh len LCD========= void LCD_dieukhien(unsigned char x) { RS=0; //thanh ghi lenh RW=0; //chon che do ghi P1 =x; EN=1; EN=0; //tin hieu cho phep delay_ms(5); } //========Ham ghi 1 ki tu len LCD======= void LCD_ghi_dulieu(unsigned char y) { RS=1; //thanh ghi du lieu RW=0; //che do ghi P1=y; EN=1; EN=0; //tin hieu cho phep delay_ms(5); } //===========Setup LCD ban dau=============== void LCD_caidat() { LCD_dieukhien(0x38); // DL = N =F =1 che do 8 bit du lieu, 2 dong, font 5*10 LCD_dieukhien(0x0C); // D=1 bat hien thi, C=B=0 tat con tro LCD_dieukhien(0x06); // i/d = 1 ,s =0 ko dich con tro va dich hien thi LCD_dieukhien(0x01); // xoa man hinh dua con tro ve vi tri dau delay_ms(15); } //=======Ham ghi 1 chuoi ki tu len LCD========= void LCD_chuoi(unsigned char *s) { while (*s) { LCD_ghi_dulieu(*s); s++; } } void Hienthi_LCD(unsigned char t) { unsigned char v; if(t<10) { LCD_ghi_dulieu(t+48); //doi sang ASCII } else if(t<100) { LCD_ghi_dulieu(t/10+48); //so hang chuc LCD_ghi_dulieu(t+48); //so hang don vi } else { v=t/10; LCD_ghi_dulieu(v/10+48); // so hang tram LCD_ghi_dulieu(v+48); //so hang chuc LCD_ghi_dulieu(t+48); //so hang don vi } } //======Loi chao dau chuong trinh====== void main(void) { TMOD=0X15;//timer 0 che do dem xung,timer 1 o che do 1 16bit IE=0X88;//cho phep ngat IP=0X08;//uu tien ngat timer 1 TH1=9216/256;//T trich mau 10ms TL1=9216%6; TR0=TR1=1; LCD_caidat(); while(1) { LCD_dieukhien(0x80); //dua con tro LCD ve dau hang 1 LCD_chuoi(":"); Hienthi_LCD(vong_giay); LCD_dieukhien(0xC0); //dua con tro ve dau hang 2 LCD_chuoi("BAI TAP LON VDK"); //dua chuoi chu len LCD delay_ms(500); LCD_dieukhien(0x01); //xoa man hinh } } void ngatT1(void) interrupt 3 { n=TH0*256+256*TL0; vong_giay=n;//xung encoder dem 100xung/vong } bạn chạy thử xem sao: Code: #include <reg52.h> #include <intrins.h> #include <stdio.h> #include <string.h> #include <stdlib.h> unsigned int n,dem; unsigned int vong_giay=0; //=======khai bao chan LCD=========== sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; //=======Ham tao tre============ void delay_ms(int n) { int k ,j; for(k=0;k<n;k++) { for(j=0;j<500;j++); } } //========Ham ghi lenh len LCD========= void LCD_dieukhien(unsigned char x) { RS=0; //thanh ghi lenh RW=0; //chon che do ghi P1 =x; EN=1; EN=0; //tin hieu cho phep delay_ms(5); } //========Ham ghi 1 ki tu len LCD======= void LCD_ghi_dulieu(unsigned char y) { RS=1; //thanh ghi du lieu RW=0; //che do ghi P1=y; EN=1; EN=0; //tin hieu cho phep delay_ms(5); } //===========Setup LCD ban dau=============== void LCD_caidat() { LCD_dieukhien(0x38); // DL = N =F =1 che do 8 bit du lieu, 2 dong, font 5*10 LCD_dieukhien(0x0C); // D=1 bat hien thi, C=B=0 tat con tro LCD_dieukhien(0x06); // i/d = 1 ,s =0 ko dich con tro va dich hien thi LCD_dieukhien(0x01); // xoa man hinh dua con tro ve vi tri dau delay_ms(15); } //=======Ham ghi 1 chuoi ki tu len LCD========= void LCD_chuoi(unsigned char *s) { while (*s) { LCD_ghi_dulieu(*s); s++; } } void Hienthi_LCD(unsigned int t) { LCD_ghi_dulieu(t/1000+0x30); LCD_ghi_dulieu((t%1000)/100+0x30); LCD_ghi_dulieu(((t%1000)%100)/10+0x30); LCD_ghi_dulieu(((t%1000)%100)%10+0x30); } //======Loi chao dau chuong trinh====== void main(void) { LCD_caidat(); LCD_dieukhien(0x80); //dua con tro LCD ve dau hang 1 LCD_chuoi("Toc_Do:"); LCD_dieukhien(0xC0); //dua con tro ve dau hang 2 LCD_chuoi("BAI TAP LON VDK"); //dua chuoi chu len LCD delay_ms(500); TMOD=0X15;//timer 0 che do dem xung,timer 1 o che do 1 16bit IE=0X88;//cho phep ngat IP=0X08;//uu tien ngat timer 1 TH1=9216/256;//T trich mau 10ms TL1=9216%256; TR0=TR1=1; //LCD_dieukhien(0x01); //xoa man hinh while(1) { } } void ngatT1(void) interrupt 3 { TR0=TR1=0; n=TH0*256+256*TL0; vong_giay=n;//xung encoder dem 100xung/vong LCD_dieukhien(0x80); //dua con tro LCD ve dau hang 1 LCD_chuoi("Toc_Do:"); Hienthi_LCD(vong_giay); TH1=9216/256;//T trich mau 10ms TL1=9216%256; TH0=TL0=0; TR0=TR1=1; } độ chính xác bạn tự tính nhé. |

    Comment

    Gửi bài viết Huỷ bỏ
  • thang_tdh thang_tdh Thành viên mới
    • Tham gia: Nov 2011
    • Bài viết: 3
    • Share
    • Tweet
    #10 10-11-2011, 23:02 haizzz a chữa nó còn ko chạy nữa những dòng code còn rối hơn e !nhưg dù sao cũng cảm ơn anh nhé !thanks

    Comment

    Gửi bài viết Huỷ bỏ
  • vannhubk vannhubk Thành viên mới
    • Tham gia: Apr 2011
    • Bài viết: 5
    • Share
    • Tweet
    #11 12-11-2011, 01:05 Chào các bạn!Mình cung dang lam de tài này.Mình có 1 số thắc mắc mong các bạn giúp đỡ: -Mình ko dùng encoder để đo tốc độ động cơ mà dùng cảm biến hồng ngoại.Mình ko hiểu giả sự encoder nó còn cho mình biết là bao nhiêu xung/vòng,Vậy nếu dùng cảm biến hồng ngoại thì làm sao để biết được bao nhiêu xung/vong nhỉ? Click image for larger version    Name:	61178751167265822604.jpg  Views:	1  Size:	61.9 KB  ID:	1353652 mạch mô fong của mình có dạng này!

    Comment

    Gửi bài viết Huỷ bỏ
  • cdtk5 cdtk5 Thành viên tích cực
    • Tham gia: Aug 2008
    • Bài viết: 219
    • Share
    • Tweet
    #12 12-11-2011, 20:57 bác nào có code asm vdk 8051 điều khiển động cơ bước và hiện thị tốc độ của nó không up lên cho em xin để em tham khảo với.

    Comment

    Gửi bài viết Huỷ bỏ
  • vietthanh123 vietthanh123 Thành viên tích cực
    • Tham gia: Mar 2011
    • Bài viết: 479
    • Share
    • Tweet
    #13 12-11-2011, 22:21 Nguyên văn bởi vannhubk Xem bài viết Chào các bạn!Mình cung dang lam de tài này.Mình có 1 số thắc mắc mong các bạn giúp đỡ: -Mình ko dùng encoder để đo tốc độ động cơ mà dùng cảm biến hồng ngoại.Mình ko hiểu giả sự encoder nó còn cho mình biết là bao nhiêu xung/vòng,Vậy nếu dùng cảm biến hồng ngoại thì làm sao để biết được bao nhiêu xung/vong nhỉ? [ATTACH=CONFIG]35282[/ATTACH] mạch mô fong của mình có dạng này! Nếu bạn dùng cảm biến thì phải tự tạo một cái đĩa có khoét lỗ trên đó (kiểu như cánh quạt) và lắp trên trục động cơ và cho cảm biến chiếu qua các lỗ đó ++> tùy theo số lỗ trên đĩa tròn đó là có thể biết được tốc độ của động cơ. Mua bán thiết bị điện công nghiệp tại Hà Nội, toàn quốc. http://diencongnghiep360.com/ http://tudienhathe.vn/

    Comment

    Gửi bài viết Huỷ bỏ
  • vannhubk vannhubk Thành viên mới
    • Tham gia: Apr 2011
    • Bài viết: 5
    • Share
    • Tweet
    #14 26-11-2011, 01:34 Bạn ơi !Mình chưa hiểu đoạn code thời gian lấy mẫu này: TH1=9216/256;//T trich mau 10ms TL1=9216%256;ri TH0=TL0=0; TR0=TR1=1; Mong bạn giải thích chỗ thời gian lấy mẫu giùm mình nhé!! Cho mình hỏi luôn thêm 1 xíu nhé!Mình lấy xung từ encoder vô ngắt ngoài!nhưng tại sao lại dùng timer 0 để đếm còn timer 1 để ngắt(trong khi 2 chân timer 0 và timer 1 chả nối vs bên ngoài cả! Cảm ơn các bạn!Mong các ban giúp đỡ!!!

    Comment

    Gửi bài viết Huỷ bỏ
  • vannhubk vannhubk Thành viên mới
    • Tham gia: Apr 2011
    • Bài viết: 5
    • Share
    • Tweet
    #15 26-11-2011, 01:37 đây là sơ đồ mạch của mình [IMG][/IMG]Click image for larger version    Name:	nhu1.jpg  Views:	1  Size:	112.0 KB  ID:	1353982Mình dùng 89c2051 và cảm biến mình lấy về chỉ được 1 xung/1 vòng và nối vs ngẳt ngoài,vậy mình phải lấy mẫu ở thời gian bao nhiêu để đáp ứng đc MCu!Mong cac bạn giúp đỡ!!

    Comment

    Gửi bài viết Huỷ bỏ
Trước 1 2 template Next Về tác giả Collapse thanghiephoa Tìm hiểu thêm về thanghiephoa Bài viết mới nhất Collapse
  • dinhthuong92 Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây! bởi dinhthuong92 Dạ, cảm ơn bác đã nghe qua và có lời khích lệ cháu ạ. Thật lòng cháu không dám nhận hai danh hiệu Kỹ sư và Nhạc sĩ đâu ạ, vì phải thật hiểu sâu nắm vững cơ, chứ thực lực cháu đây chỉ là biết chút ít thôi à. Về phần...
    • Channel: Tâm tình dân kỹ thuật
    29-01-2026, 11:58
  • bqviet Trả lời cho Có mạch sạc nlmt nào có mppt không các bác bởi bqviet Đơn giản thì có trải nghiệm này http://www.dientuvietnam.net/forums/...ch%C3%AA%CC%81 Chỉ phần cứng,...
    • Channel: Điện tử công suất
    27-01-2026, 21:32
  • Nexus 6P Trả lời cho Có mạch sạc nlmt nào có mppt không các bác bởi Nexus 6P phức tạp quá, nếu mà có mạch làm sẵn thì ngon, e dùng 2 tấm pv loại 18v 55w thôi bác
    • Channel: Điện tử công suất
    26-01-2026, 08:52
  • Nexus 6P Trả lời cho Có mạch sạc nlmt nào có mppt không các bác bởi Nexus 6P cảm ơn bác nhiều nha, để e nghiên cứu
    • Channel: Điện tử công suất
    26-01-2026, 07:38
  • vi van pham Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây! bởi vi van pham kỹ sư nhạc sĩ dinhthuong dạo này lên tay nghề khá quá.
    • Channel: Tâm tình dân kỹ thuật
    25-01-2026, 21:29
  • dinhthuong92 Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây! bởi dinhthuong92 Hát Mừng Sinh Nhật, sáng tác: HĐT, hòa âm-thể hiện: AI https://youtu.be
    • Channel: Tâm tình dân kỹ thuật
    24-01-2026, 22:13
  • dinhthuong92 Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây! bởi dinhthuong92 Chào bác, gần Tết công việc bác bận lắm phải không? Vâng mọi người đều thế cả. Em mới trả phí cho nó 1 tháng, nhờ nó hát thử ấy ạ. Tiếc vì em đã dốt nhạc lí lại lười học nên sáng tác thì vụng về mà hát demo... https://youtu.be
    • Channel: Tâm tình dân kỹ thuật
    24-01-2026, 21:53
  • bqviet Trả lời cho Có mạch sạc nlmt nào có mppt không các bác bởi bqviet Cảm thấy cứng tay thì làm theo hướng dẫn khá chi tiết ở trang sau https://www.instructables.com/DIY-1k...ge-Controller/
    • Channel: Điện tử công suất
    23-01-2026, 16:50
  • Nexus 6P Có mạch sạc nlmt nào có mppt không các bác bởi Nexus 6P Như tiêu đề, các bác giới thiệu e mạch sạc nlmt mppt có chức năng chỉnh dòng với, tấm PV của em 18V 55W, dùng để sạc cho khối pin sắt 3.2V 45A (sắp tới sẽ thay bằng ắc quy 12V) e cảm ơn
    • Channel: Điện tử công suất
    23-01-2026, 11:23
Xem toàn bộ Copyright © 2000-2026 Dientuvietnam.net. Founded by BinhAnh. Developed by R&P. All rights reserved. Forum software powered by vBulletin® Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Múi giờ GMT+7. Trang này được tạo vào lúc 14:58. Đang tải... Ðồng ý Không OK OK Huỷ bỏ X

Từ khóa » Encoder Với 8051