hiện tại mình đang làm mạch cửa tự động dùng PIR203D trên proteus mô phỏng ok hết mà khi làm mạch thật thì không chạy ( chân 24,25 vdk 89c52 mình thấy luôn ở mức 1 không về mức 0 được,nên opto pc 817 không hoạt động kiểu đóng mở được). Ở dưới là mạch mô phỏng của mình, mọi người góp ý dùm mình với, mình làm bài tập này sắp nộp rồi.
cần giúp đỡ về mạch vdk 8051 điều khiển động cơ DC
Collapse
X
-
#include <REGX52.H>
#include <stdio.h>
#include <math.h>
#include <intrins.h>
#include <string.h>
// Dinh nghia chan Dieu Khien
#define K1 P1_0
#define K2 P1_1
#define K3 P1_2
#define K4 P1_3
#define K5 P1_4
// Dinh nghia chan LCD
#define RS P2_0
#define RW P2_1
#define EN P2_2
#define LCDdata P0
#define BF P0_7
// Dinh nghia chan Led
#define LED1 P2_3
#define LED2 P2_4
// Khai bao chuoi hien thi
unsigned char code string1[]
unsigned char code string2[]
unsigned char i,j,k;
/*********HAM DELAY***********/
void delay(unsigned char ms)
{
for(i =0;i<ms;i++)
{for(j=0;j<125;j++){;}
}
}
//=======================================
void tre(unsigned int t)
{
unsigned int i;
for(i=0;i<=t;i++);
}
/*************HAM CHO***************/
void wait(void)
{
RS=0;//thanh ghi lenh
RW=1;//doc du lieu tu lcd
LCDdata=0xff;//gia tri 11111111 // khoi dong ngo vao
while(BF) //kiem tra co ban
{
EN =0;//dua xung thap en cao de chot
EN =1;//dua xung len cao
}
}
////////////////thiet lap Dieu khien LCD//////////////
void LCDcontrol(unsigned char x)
{
RS = 0;//chon thanh ghi lenh
RW =0;//ghi du lieu len lcd
LCDdata =x;
EN=1; //dua xung cao xuong thap de mo
EN=0;
wait();//doi LCD san sang
}
//////////////////Khoi tao LCD////////////
void LCDinit(void)
{
LCDcontrol(0x30);
tre(500);
LCDcontrol(0x30);
tre(100);
LCDcontrol(0x30);
LCDcontrol(0x38);//2 dong va ma tran 5x7
LCDcontrol(0x0e);//bat man hinh,bat con tro
LCDcontrol(0x01);//xoa man hinh
}
///////////////Thiet lap du lieu co LCD/////////
void LCDwrite(unsigned char c)
{
RS=1;//Ghi du lieu
RW=0;//ghi du lieu len LCD
LCDdata=c;
EN=1;
EN=0;
tre(50);
}
///////////////////
void LCDwrites(unsigned char*s)
{
unsigned char data lens,count;
lens=strlen(s);
for(count=0;count<lens;count++)
{
LCDwrite(*(s+count));
}
}
//////////////HAM HIEN THI CHUOI KY TU//////////////
void SendString2LCD(unsigned char code *p)
{
unsigned char i=0;
while(p[i]!=0)
{
LCDwrite(p[i]);
i++;
delay(200);
}
}
/////////////////HAM HIEN THI DONG CHU///////////////////
void DisplayText(void)
{
// Dich con tro den vi tri thu 1, dong thu nhat
LCDcontrol(0x80);
SendString2LCD(string1);
// Dich con tro den dau dong thu hai
LCDcontrol(0xC0);
SendString2LCD(string2);
}
/////////////// XOA LCD///////////////////
void LCDclear(void)
{
LCDcontrol(0x01);
wait();
}
////////////// HIEN THI 1 SO LEN LCD < 100
void putnum(unsigned char val)
{
if(val<10){
LCDwrite(val+48);
}else if(val<100){
LCDwrite(val/10+48);
LCDwrite(val%10+48);
}
}
//////////////////HIEN THI SO LEN LCD > 100
void LCD_putnum(int num)
{
unsigned char nghin,tram,chuc,donv;
nghin=num/1000;
tram=(num%1000)/100;
chuc
num%1000)%100)/10;
donv
num%1000)%100)%10;
LCDwrite(nghin+48);
LCDwrite(tram+48);
LCDwrite(chuc+48);
LCDwrite(donv+48);
}
//////////////////HAM PHIM BAM DIEU KHIEN/////////////////////
void dieukhien_hn(void)
{
if(K1==0)
{
LCDclear();
LCDcontrol(0x81);// dua con tro ve vi tri 2 dong thu nhat
LCDwrites(" WELLCOM ");
LCDcontrol(0xC0); // ep con tro ve dau dong thu 2
LCDwrites(" DH13TD ");
delay(100);
LED1=1;
}
else{LED1=0;}
if(K1==1)
{
LED2=1;
}
else{LED2=0;}
}
//===============================
void main(void)
{
LCDcontrol(0x01);
LCDinit();//Khoi tao LCD
LCDcontrol(0x82); // dua con tro den vi tri thu 4 dong 1
LCDwrites("HAI LONG");
LCDcontrol(0xC0); // ep con tro ve dau dong thu 2
LCDwrites("CUA TU DONG");
/*LCDclear();
LCDcontrol(0x0f);//nhap nhay con tro
DisplayText();//viet chuoi ky tu */
while(1)//vong lap vo han
{
dieukhien_hn();
}
}
Comment
-
LCD trên proteus thì chạy bình thường, còn trên mạch thật mình chưa lắp vô.Nguyên văn bởi tanh_ta Xem bài viếtLCD có chạy k? Hay không có gì chạy cả
Comment
-
chưa bàn về code và các phần khác của mạch, riêng opto lắp thế k đủ để dẫn được, vì dòng xuất con 89xx ra nhỏ, bác nên lắp lại cho xuất ra mức 0 nhé. Sau đó mới test tiếp các phần khác/caoson.vnatr@gmail.com
Thiết kế mạch điện tử
0914024690
Comment
-
Nguyên văn bởi caoson_vnatr Xem bài viếtchưa bàn về code và các phần khác của mạch, riêng opto lắp thế k đủ để dẫn được, vì dòng xuất con 89xx ra nhỏ, bác nên lắp lại cho xuất ra mức 0 nhé. Sau đó mới test tiếp các phần khác/
bác xem em sửa lại thế có được không? hay bác cho em xin cái ví dụ đi.
Comment
Bài viết mới nhất
Collapse
Up code lên xem sao?

Comment