วันศุกร์ที่ 28 กุมภาพันธ์ พ.ศ. 2563

โวลต์มิเตอร์แบบดิจิตอลที่ใช้ 8051 Microcontroller

โวลต์มิเตอร์แบบดิจิตอลที่ใช้ 8051 Microcontroller


โวลต์มิเตอร์แบบดิจิตอลที่ใช้ไมโครคอนโทรลเลอร์ 8051 และวงจรเซ็นเซอร์แรงดันไฟฟ้าส่วนประกอบวงจร

  • AT89C51 micro controller
  • ADC0804 IC
  • 25V Voltage Sensor
  • AT89C51 programming board
  • Variable resistor (to demonstrate the program)
  • DC Adapter or Battery
Code
#include<reg51.h>
#define lcd P3
#define dat P2
sbit rs=P1^6;
sbit e=P1^7;


void delay (int);
void display (unsigned char);
void cmd (unsigned char);
void init (void);
void string (char *);
void intro (void);
char i=0;

void delay (int d)
{
unsigned char i=0;
for(;d>0;d--)
{
for(i=250;i>0;i--);
                for(i=248;i>0;i--);
}
}
void cmd (unsigned char c)
{
lcd=c;
rs=0;
e=1;
delay(10);
e=0;
}
void display (unsigned char c)
{

lcd=c;
rs=0;
e=1;
delay(10);
e=0;
}
void display (unsigned char c)
{
lcd=c;
rs=1;
e=1;
delay(10);
e=0;
}
void string (char *c)
{
while(*c)
{
display(*c++);
}
}
void init (void)
{
cmd(0x38);
cmd(0x01);
  cmd(0x0c);
cmd(0x80);
}
void intro (void)
{
string("  Electronics  ");
cmd(0xc0);
string("      Hub      ");
delay(2000);
cmd(0x01);
string("    Digital    ");
cmd(0xc0);
string("   Voltmeter   ");
delay(2000);
cmd(0x01);
cmd(0x80);
}

void main()
{
unsigned int temp=0;
unsigned int temp1=0;
float val=0.0;
init();
intro();
dat=0xff;
while(1)
{
if(i==0)
{
string(" Volts - ");
i++;
}
val=dat*0.02;  // 0.02 is resolution of adc
val=val/0.2;   // 0.2 is nothing but (R2/(R1+R2)) resistor values in the voltage sensor
    cmd(0x89);
if((val>=1.0) && (val<10.0))
{
display(' ');
   temp=val*1000;
   temp1=((temp/1000)+48);
   display(temp1);
display('.');
   temp1=(((temp/100)%10)+48);
   display(temp1);
}
else if((val>=10.0) && (val<100.0))
{
  temp=val*100;
   temp1=((temp/1000)+48);
   display(temp1);
temp1=(((temp/100)%10)+48);
   display(temp1);
display('.');
temp1=(((temp/10)%10)+48);
   display(temp1);
}
else
{
display(' ');
string("0.0");
}
delay(1000);
  }
while(1);
}

วงจรเซ็นเซอร์อุณหภูมิแบบดิจิตอล

วงจรเซ็นเซอร์อุณหภูมิแบบดิจิตอล


วงจรเซ็นเซอร์อุณหภูมิแบบดิจิตอล


ส่วนประกอบที่จำเป็น
  • AT89C51 (8051 Microcontroller)
  • 11.0592 MHz Cystal
  • 2 X 33pF Capacitor
  • 10μF/16V Capacitor
  • 3 X 10KΩ Resistor
  • 1KΩ x 8 Resistor Pack
  • 10KΩ POT
  • 16X2 LCD Display
  • ADC0804
  • LM35
  • 150pF Capacitor
  • 330Ω Resistor
  • Power Supply
  • Connecting Wires
  • 8051 Programmer
Code
#include<reg51.h>
#define lcd P0
#define dat P3
sbit rs=P2^0;
sbit e=P2^1;


void delay (int);
void display (unsigned char);
void cmd (unsigned char);
void init (void);
void string (char *);
void intro (void);
unsigned char degree[8]={0x0e,0x0a,0x0e,0x00,0x00,0x00,0x00,0x00};
char i=0;

void delay (int d)
{
unsigned char i=0;
for(;d>0;d--)
{
for(i=250;i>0;i--);
for(i=248;i>0;i--);
}
}
void cmd (unsigned char c)
{
lcd=c;
rs=0;
e=1;
delay(10);
e=0;
}
void display (unsigned char c)
{
lcd=c;
rs=1;
e=1;
delay(10);
e=0;
}
void string (char *c)
{
while(*c)
{
display(*c++);
}
}
void init (void)
{
cmd(0x38);
cmd(0x01);
  cmd(0x0c);
cmd(0x80);
}
void intro (void)
{
string("  Electronics  ");
cmd(0xc0);
string("      Hub      ");
delay(1000);
cmd(0x01);
string("    Digital    ");
cmd(0xc0);
string("  Thermometer  ");
delay(1000);
cmd(0x01);
cmd(0x40);
for(i=0;i<8;i++)
display(degree[i]);
  i=0;
 cmd(0x80);
}

void main()
{
unsigned int val=0;
unsigned int temp=0;
init();
intro();
dat=0xff;
while(1)
{
if(i==0)
{
string("Temp: ");
i++;
}
val=dat*1.953;
cmd(0x86);
temp=(((val/10)%10)+48);
display(temp);
temp=((val%10)+48);
display(temp);
    if(i==1)
{
display(0);
string("C");
i++;
}
delay(300);
}
while(1);
}

วันจันทร์ที่ 17 กุมภาพันธ์ พ.ศ. 2563

ใบงานที่12


void main()
{
  int i=3;
  int j;
  TRISC=0;
    while(j<5)
    {
    switch (i)
    {
      case 1:
           PORTC.F3=1;
           delay_ms(200);
           PORTC.F3=0;
           delay_ms(200);
           break;
       case 2:
           PORTC.F0=0;
           delay_ms(200);
           PORTC.F0=0;
           delay_ms(200);
           break;
        case 3:
           PORTC.F0=1;
           delay_ms(200);
           PORTC.F0=0;
           delay_ms(200);
           break;
       case 4:
           PORTC.F0=0;
           delay_ms(200);
           PORTC.F0=0;
           delay_ms(200);
           break;
    }
           j++;
    }
  }

ใบงานที่13



void main()
{
  int i=3;
  int j;
  TRISC=0;
    do {
       switch (i)
         {
          case 1:
           PORTC.F3=1;
           delay_ms(200);
           PORTC.F3=0;
           delay_ms(200);
           break;
          case 2:
           PORTC.F0=0;
           delay_ms(200);
           PORTC.F0=0;
           delay_ms(200);
           break;
          case 3:
           PORTC.F0=1;
           delay_ms(200);
           PORTC.F0=0;
           delay_ms(200);
           break;
          case 4:
           PORTC.F0=0;
           delay_ms(200);
           PORTC.F0=0;
           delay_ms(200);
           break;
         }
           j++;
      }
    while(j<5);
  }

วันอาทิตย์ที่ 16 กุมภาพันธ์ พ.ศ. 2563

ใบงานที่11


void main()
{
  int i=3; //   i = 1,2,3,4
  TRISC=0;
    while(1)
    {
    switch (i)
    {
      case 1:           //   i = 1
           PORTC.F3=1;
           delay_ms(200);
           PORTC.F3=0;
           delay_ms(200);
           break;
       case 2:
           PORTC.F0=0;
           delay_ms(200);
           PORTC.F0=0;
           delay_ms(200);
           break;
        case 3:        //   i = 3
           PORTC.F0=1;
           delay_ms(200);
           PORTC.F0=0;
           delay_ms(200);
           break;
       case 4:
           PORTC.F0=0;
           delay_ms(200);
           PORTC.F0=0;
           delay_ms(200);
           break;
    }
    }
  }

ใบงานที่10


void main()
{
  int i;
  TRISC=0;

    for (i = 0;i<5; i++)
    {
       PORTC.F0=1;
        delay_ms(200);
       PORTC.F0=0;
           delay_ms(200);
    }
   for (i = 0;i<10; i++)
    {
       PORTC.F7=1;
        delay_ms(200);
       PORTC.F7=0;
           delay_ms(200);
    }
}

วันอังคารที่ 4 กุมภาพันธ์ พ.ศ. 2563

การบ้าน1



#define sw1 PORTB.F0
#define Buzzer PORTC.F7
void main()
{
     char segment[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d};
     int i=0;
     TRISC=0;
     PORTC=segment[0];
     while(1)
     {
           if(sw1==0)
           {
           Buzzer=1;
           delay_ms(300);

           i=i+1;
           if(i>5)i=0;
           PORTC=segment[i];

           }
        else if(i==5)Buzzer=1;

}
 }