ُسلام دوستان
من پروژه دما سنج دیجیتال رو انتخاب کردم ولی از برنامه نویسی به زبان C هیچی سر در نمیارم... می خواستم ببینم از دوستان کسی هست تا برنامه نوشته شده رو برام توضیح بده؟
اینم برنامه ای که دارم:
http://www.4shared.com/file/15525263...moproject.html
و مدار:
و اینکه منظور از خاص بودن کلید sw1 چیه؟
و همینطور At89s8252 توی کتابخانه پروتیوس و پروتل نییست... باید پچیکار کنم؟
ممنون میشم جوبمو بدین خیلی حیاتیه :sad: :sad:
اگه نتونستید برنامه رو دانلود کنید اینجا می زارم:
#include <reg52.h>
#include <stdio.h>
void timer0int(void);
char *Puts(char* str);
float read_temp1(void);
float read_temp1_filter(void);
char cputick;
char buffer[24];
char pulseE;
char timer3;
char temp;
char vout;
int x1,x2,x3,x4,x5;
sbit RS=P1^6;
sbit E =P1^4;
sbit RW=P1^5;
sbit CLK=P1^2;
sbit Data=P1^1;
sbit CS=P1^3;
sbit CHG=P3^0;
int readADC(char n)
{
int k;
char i,channel;
k=0;
CS=0;
if(n==0) channel= 0x0d;
else channel=0x0f;
for (i=0;i<4;i++)
{
CLK = 0;
if(channel&8) Data =1;
else Data = 0;
CLK =1;
channel <<=1;
}
Data = 1;
CLK =0;
for(i=0; i<12;i++)
{
k<<=1;
CLK =1;
CLK=0;
if(Data) k|=1;
else k &=~1;
}
CS =1;
return k&=0xfff;
}
void timer0int(void) interrupt 1 using 1
{
TH0 |=0xdc;
cputick++;
}
pause(int j)
{ int i;
for (i=0;i<j;i++)
continue;
}
pulesE()
{
E =1;
;
E =0;
}
void delay(int m)
{
int j;
for(j=0;j<=m;j++)
continue;
}
LCDWI (char n)
{
RW =0;
RS=0;
E =0;
P0=n;
E =1;
E =0;
pause(50);
}
LCDWD(char n)
{
RW=0;
RS=1;
E=0;
P0=n;
E=1;
E=0;
pause(50);
}
print_LCD(char a,char *s)
{
LCDWI(a);
while(*s != 0)
LCDWD(*s++);
}
i_LCD()
{
RS=0;
E=0;
P0=0x30;pulesE();delay(10);pulesE();delay(1);pules E();delay(1);
P0=0x20;pulesE();pulesE();pulesE();
LCDWI(0x38);
LCDWI(0x0c);
LCDWI(0x06);
LCDWI(1);
delay(50);
}
print_ADC()
{
char buffer[20];
if(++timer3<50)
{
timer3=0;
sprintf(buffer,"%0.1fC %0.1fF",read_temp1_filter(),read_temp1_filter ()*9/5+32);
print_LCD(0xc0,buffer);
}
}
int low_pass_filter1(void)
{
x5=x4;
x4=x3;
x3=x2;
x2=x1;
x1=readADC(0);
return(x1+x2+x3+x4+x5)/5;
}
float read_temp1_filter(void)
{
return(0.0323*low_pass_filter1()-15.615);
}
void main()
{
i_LCD();
print_LCD(0x80,"LCD Thermometer"
TMOD |= 0x01;
TR0 = 1;
cputick = 0;
EA = 1;
ET0 = 1;
for(;
{
while(!TF0)
continue;
TF0=0;
print_ADC();
}
}
من پروژه دما سنج دیجیتال رو انتخاب کردم ولی از برنامه نویسی به زبان C هیچی سر در نمیارم... می خواستم ببینم از دوستان کسی هست تا برنامه نوشته شده رو برام توضیح بده؟
اینم برنامه ای که دارم:
http://www.4shared.com/file/15525263...moproject.html
و مدار:
و اینکه منظور از خاص بودن کلید sw1 چیه؟
و همینطور At89s8252 توی کتابخانه پروتیوس و پروتل نییست... باید پچیکار کنم؟
ممنون میشم جوبمو بدین خیلی حیاتیه :sad: :sad:
اگه نتونستید برنامه رو دانلود کنید اینجا می زارم:
#include <reg52.h>
#include <stdio.h>
void timer0int(void);
char *Puts(char* str);
float read_temp1(void);
float read_temp1_filter(void);
char cputick;
char buffer[24];
char pulseE;
char timer3;
char temp;
char vout;
int x1,x2,x3,x4,x5;
sbit RS=P1^6;
sbit E =P1^4;
sbit RW=P1^5;
sbit CLK=P1^2;
sbit Data=P1^1;
sbit CS=P1^3;
sbit CHG=P3^0;
int readADC(char n)
{
int k;
char i,channel;
k=0;
CS=0;
if(n==0) channel= 0x0d;
else channel=0x0f;
for (i=0;i<4;i++)
{
CLK = 0;
if(channel&8) Data =1;
else Data = 0;
CLK =1;
channel <<=1;
}
Data = 1;
CLK =0;
for(i=0; i<12;i++)
{
k<<=1;
CLK =1;
CLK=0;
if(Data) k|=1;
else k &=~1;
}
CS =1;
return k&=0xfff;
}
void timer0int(void) interrupt 1 using 1
{
TH0 |=0xdc;
cputick++;
}
pause(int j)
{ int i;
for (i=0;i<j;i++)
continue;
}
pulesE()
{
E =1;
;
E =0;
}
void delay(int m)
{
int j;
for(j=0;j<=m;j++)
continue;
}
LCDWI (char n)
{
RW =0;
RS=0;
E =0;
P0=n;
E =1;
E =0;
pause(50);
}
LCDWD(char n)
{
RW=0;
RS=1;
E=0;
P0=n;
E=1;
E=0;
pause(50);
}
print_LCD(char a,char *s)
{
LCDWI(a);
while(*s != 0)
LCDWD(*s++);
}
i_LCD()
{
RS=0;
E=0;
P0=0x30;pulesE();delay(10);pulesE();delay(1);pules E();delay(1);
P0=0x20;pulesE();pulesE();pulesE();
LCDWI(0x38);
LCDWI(0x0c);
LCDWI(0x06);
LCDWI(1);
delay(50);
}
print_ADC()
{
char buffer[20];
if(++timer3<50)
{
timer3=0;
sprintf(buffer,"%0.1fC %0.1fF",read_temp1_filter(),read_temp1_filter ()*9/5+32);
print_LCD(0xc0,buffer);
}
}
int low_pass_filter1(void)
{
x5=x4;
x4=x3;
x3=x2;
x2=x1;
x1=readADC(0);
return(x1+x2+x3+x4+x5)/5;
}
float read_temp1_filter(void)
{
return(0.0323*low_pass_filter1()-15.615);
}
void main()
{
i_LCD();
print_LCD(0x80,"LCD Thermometer"
TMOD |= 0x01;
TR0 = 1;
cputick = 0;
EA = 1;
ET0 = 1;
for(;
{
while(!TF0)
continue;
TF0=0;
print_ADC();
}
}
دیدگاه