Giúp em với các bác ơi! Đề tài của em cũng như thế, nhưng khác là: thiết kế bộ đo và khống chế nhiệt độ. nhiệt độ đo được được hiển thị bằng LCD, nhiệt độ cần khống chế được đặt bằng phím nhấn, thao tác khống chế được mô phỏng bằng 3 led với 3 màu khác nhau. Sai số cho phép là +/-1độ C. em đã làm mạch in rồi nhưng ko hiểu sao ko chạy. em post lên các bác tham khảo và chỉnh sửa giúp em với.
Đây là chương trình nạp của em!
#include <reg52.h>
#include <stdio.h>
void Init_LCD(void); // Cai dat LCD
void W_ctr_8bit(char); // Dua tu dien khien toi LCD
void W_data_8bit(char); // Hien thi ki tu len LCD
void Delay_1kcyc(void); // Tre 1000 chu ki, 1ms
void delay(unsigned long int d); // Tre d chu ki
void ad_convert(void); // Doc ADC
sbit LCD_RS = P1^0; // RS LCD
sbit LCD_E = P1^2; // ENABLE LCD
sbit LCD_RW = P1^1; // RW LCD
sbit INTR = P3^5; // INTR ADC
sbit RD_ADC = P3^7; // RD ADC
sbit WR_ADC = P3^6; // WR ADC
unsigned char LCD_TEMP,i,j;
unsigned long int n;
unsigned long int adc,value,tr,ch,dv;
char bien0[16] = "Mach do nhiet do";
char bien1[16] = " Hien thi LCD ";
char bien2[16] = " Nhiet do la: ";
char bien3[5] = "Do C";
void main()
{
LCD_RW = 0;
P0 = 0x0f;
Init_LCD(); // LCD setup
W_ctr_8bit(0x81); // Hien thi dong 1, cot 2
for (i=0; i<16; i++) // Hien thi chuoi "Mach do nhiet do"
{
W_data_8bit(bien0[i]); // Dua ki tu ra hien thi tren LCD
delay(10);
}
delay(10);
W_ctr_8bit(0xC1); // Hien thi dong 2, cot 2
for (i=0; i<16; i++) // Hien thi chuoi "Hien thi LCD"
{
W_data_8bit(bien1[i]); // Dua ki tu ra hien thi tren LCD
}
delay(20000);
W_ctr_8bit(0x01); // Xoa man hinh
W_ctr_8bit(0x82); // Hien thi dong 1, cot 3
for (i=0; i<13; i++) // Hien thi chuoi "Nhiet do la:"
{
W_data_8bit(bien2[i]); // Dua ki tu ra hien thi tren LCD
}
delay(100);
while (1)
{
ad_convert(); // Doc ADC
delay(100);
W_ctr_8bit(0xC4); // Hien thi dong 2, cot 10
W_data_8bit(tr+0x30);
W_data_8bit(ch+0x30);
W_data_8bit(0x2E); // Hien thi ki tu "."
W_data_8bit(dv+0x30);
W_ctr_8bit(0xC9); // Hien thi dong 2, cot 10
for (i=0; i<4; i++) // Hien thi chuoi "Do C"
{
W_data_8bit(bien3[i]); // Dua ki tu ra hien thi tren LCD
delay(100);
}
delay(500);
}
}
// Cai dat LCD
void Init_LCD(){
W_ctr_8bit(0X03);
W_ctr_8bit(0X38);
W_ctr_8bit(0X06);
W_ctr_8bit(0X0e);
W_ctr_8bit(0x01);
}
// Dua tu dien khien toi LCD
void W_ctr_8bit(char bien){
LCD_RS = 0;
LCD_E = 1;
P0 = bien;
LCD_E = 0;
Delay_1kcyc();
}
// Hien thi ki tu len LCD
void W_data_8bit(char bien){
LCD_RS = 1;
LCD_E = 1;
P0 = bien;
LCD_E = 0;
Delay_1kcyc();
}
void Delay_1kcyc(){
unsigned int j;
for(j=0; j<1000; j++);
}
void delay(unsigned long int d)
{
for (n=0;n<d;n++);
}
void ad_convert(void)
{
WR_ADC = 0; // Cam che do viet ADC
RD_ADC = 0;
delay(3);
WR_ADC = 1; // Mo che do doc ADC
if(INTR == 1)
{
adc = P2; // Doc ADC
value = (adc*700)/255; // Chuyen doi 255 -> 250
}
RD_ADC = 0; // Cam che do doc
tr = value/100; // Gia tri hang tram
ch = (value%100)/10; // Gia tri hang chuc
dv = (value%100)%10; // Gia tri hang don vi
}
Còn đây là mạch nguyên lý của em:[/QUOTE]
đây là mạch nguyên lý. Nếu sai các bác chỉnh sửa giúp em vơi!
Đây là chương trình nạp của em!
#include <reg52.h>
#include <stdio.h>
void Init_LCD(void); // Cai dat LCD
void W_ctr_8bit(char); // Dua tu dien khien toi LCD
void W_data_8bit(char); // Hien thi ki tu len LCD
void Delay_1kcyc(void); // Tre 1000 chu ki, 1ms
void delay(unsigned long int d); // Tre d chu ki
void ad_convert(void); // Doc ADC
sbit LCD_RS = P1^0; // RS LCD
sbit LCD_E = P1^2; // ENABLE LCD
sbit LCD_RW = P1^1; // RW LCD
sbit INTR = P3^5; // INTR ADC
sbit RD_ADC = P3^7; // RD ADC
sbit WR_ADC = P3^6; // WR ADC
unsigned char LCD_TEMP,i,j;
unsigned long int n;
unsigned long int adc,value,tr,ch,dv;
char bien0[16] = "Mach do nhiet do";
char bien1[16] = " Hien thi LCD ";
char bien2[16] = " Nhiet do la: ";
char bien3[5] = "Do C";
void main()
{
LCD_RW = 0;
P0 = 0x0f;
Init_LCD(); // LCD setup
W_ctr_8bit(0x81); // Hien thi dong 1, cot 2
for (i=0; i<16; i++) // Hien thi chuoi "Mach do nhiet do"
{
W_data_8bit(bien0[i]); // Dua ki tu ra hien thi tren LCD
delay(10);
}
delay(10);
W_ctr_8bit(0xC1); // Hien thi dong 2, cot 2
for (i=0; i<16; i++) // Hien thi chuoi "Hien thi LCD"
{
W_data_8bit(bien1[i]); // Dua ki tu ra hien thi tren LCD
}
delay(20000);
W_ctr_8bit(0x01); // Xoa man hinh
W_ctr_8bit(0x82); // Hien thi dong 1, cot 3
for (i=0; i<13; i++) // Hien thi chuoi "Nhiet do la:"
{
W_data_8bit(bien2[i]); // Dua ki tu ra hien thi tren LCD
}
delay(100);
while (1)
{
ad_convert(); // Doc ADC
delay(100);
W_ctr_8bit(0xC4); // Hien thi dong 2, cot 10
W_data_8bit(tr+0x30);
W_data_8bit(ch+0x30);
W_data_8bit(0x2E); // Hien thi ki tu "."
W_data_8bit(dv+0x30);
W_ctr_8bit(0xC9); // Hien thi dong 2, cot 10
for (i=0; i<4; i++) // Hien thi chuoi "Do C"
{
W_data_8bit(bien3[i]); // Dua ki tu ra hien thi tren LCD
delay(100);
}
delay(500);
}
}
// Cai dat LCD
void Init_LCD(){
W_ctr_8bit(0X03);
W_ctr_8bit(0X38);
W_ctr_8bit(0X06);
W_ctr_8bit(0X0e);
W_ctr_8bit(0x01);
}
// Dua tu dien khien toi LCD
void W_ctr_8bit(char bien){
LCD_RS = 0;
LCD_E = 1;
P0 = bien;
LCD_E = 0;
Delay_1kcyc();
}
// Hien thi ki tu len LCD
void W_data_8bit(char bien){
LCD_RS = 1;
LCD_E = 1;
P0 = bien;
LCD_E = 0;
Delay_1kcyc();
}
void Delay_1kcyc(){
unsigned int j;
for(j=0; j<1000; j++);
}
void delay(unsigned long int d)
{
for (n=0;n<d;n++);
}
void ad_convert(void)
{
WR_ADC = 0; // Cam che do viet ADC
RD_ADC = 0;
delay(3);
WR_ADC = 1; // Mo che do doc ADC
if(INTR == 1)
{
adc = P2; // Doc ADC
value = (adc*700)/255; // Chuyen doi 255 -> 250
}
RD_ADC = 0; // Cam che do doc
tr = value/100; // Gia tri hang tram
ch = (value%100)/10; // Gia tri hang chuc
dv = (value%100)%10; // Gia tri hang don vi
}
Còn đây là mạch nguyên lý của em:[/QUOTE]
đây là mạch nguyên lý. Nếu sai các bác chỉnh sửa giúp em vơi!
Comment