วงจรเข้ารหัส
วันจันทร์ที่ 9 มีนาคม พ.ศ. 2563
วันอังคารที่ 25 กุมภาพันธ์ พ.ศ. 2563
งานหา micro 18
Interfacing LED
#include<reg51.h>
#define led P0
unsigned char i=0;
void delay (int);
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 main()
{
while(1)//// led blink
{
led=0xff;
delay(1000);
led=0x00;
delay(1000);
++i;
if(i==7)
{
i=0;
break;
}
}
while(1)//// binary equivalent representation of 1byte data
{
led=i++;
if(i==256)
{
i=0;
break;
}
delay(500);
}
while(1);
}
งานหา micro 17
8 Channel Quiz Buzzer Circuit using Microcontroller
#include<reg51.h>
#define SEGMENT P2 // PORT2 to Segments of 7-Segment Display
#define SWITCH P1 // Input Switches (buttons) to PORT1
sbit buzz=P3^0; // Buzzer
sbit rst=P3^3; // Reset Switch (Reset the display) - not the microcontroller
sbit digit=P3^7; // 7-Segment Display Common Pin (to enable)
void delay (int); // Delay function
int x=0,y,z;
unsigned char ch[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98}; // Hexadecimal values from 0 to 9.
void delay (int d)
{
unsigned char i;
for(;d>0;d--)
{
for(i=250;i>0;i--);
for(i=248;i>0;i--);
}
}
void main()
{
SWITCH=0xff;
SEGMENT=0xff;
digit=1;
buzz=0;
rst=1;
while(1)
{
while(SWITCH==0xff); // wait until any button is pressed.
while (SWITCH==0xfe) // Button 1 is pressed.
{
SEGMENT=ch[1];
buzz=1;
delay(1000); // Activate buzzer for 1 second.
buzz=0;
while(rst!=0); // display the digit until the reset is pressed.
}
while (SWITCH==0xfd) // Button 2 is pressed.
{
SEGMENT=ch[2];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
}
while (SWITCH==0xfb) // Button 3 is pressed.
{
SEGMENT=ch[3];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
}
while (SWITCH==0xf7) // Button 4 is pressed.
{
SEGMENT=ch[4];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
}
while (SWITCH==0xef) // Button 5 is pressed.
{
SEGMENT=ch[5];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
}
while (SWITCH==0xdf) // Button 6 is pressed.
{
SEGMENT=ch[6];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
}
while (SWITCH==0xbf) // Button 7 is pressed.
{
SEGMENT=ch[7];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
}
while (SWITCH==0x7f) // Button 8 is pressed.
{
SEGMENT=ch[8];
buzz=1;
delay(1000);
buzz=0;
while(rst!=0);
}
SEGMENT=0xff;
rst=1;
}
}
งานหา micro 16
Bipolar LED Driver Circuit
#include<reg51.h>
sbit red = P0^0;
sbit green = P0^1;
sbit red_switch = P0^6;
sbit green_switch = P0^7;
unsigned char i=0;
void delay (int);
void main()
{
red=0;
green=0;
while(1)
{
if(red_switch==0)
{
green=0;
red=1;
while(red_switch==0);
}
else if(green_switch==0)
{
green=1;
red=0;
while(green_switch==0);
}
}
}
งานหา micro 15
Random Number Generator
#include<reg51.h>
#define lcd P0
sbit rs=P2^0;
sbit e=P2^1;
sbit sw=P3^0;
sbit rst=P3^1;
unsigned int i=0;
void delay (int);
void display (unsigned char);
void cmd (unsigned char);
void string (char *);
void init (void);
void int_lcd(unsigned int);
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(5);
e=0;
}
void display (unsigned char c)
{
lcd=c;
rs=1;
e=1;
delay(5);
e=0;
}
void string (char *p)
{
while(*p)
{
display(*p++);
}
}
void init (void)
{
cmd(0x38);
cmd(0x0c);
cmd(0x01);
cmd(0x80);
}
void int_lcd(unsigned int n)
{
char a[4]={0},i=0;
if(n==0)
{
display('0');
return;
}
else
{
while(n>0)
{
a[i++]=(n%10)+48;
n/=10;
}
for(--i;i>=0;i--)
{
display(a[i]);
}
}
}
void main()
{
sw=1;
rst=1;
init();
cmd(0x80);
string(" Random Number ");
cmd(0xc0);
string(" Generator ");
delay(2000);
cmd(0x01);
while(1)
{
cmd(0x80);
string("Press the button");
while(sw!=0)
{
i=++i;
if(i==100)
i=0;
}
cmd(0x80);
string("RAND NUM: ");
cmd(0x8a);
int_lcd(i);
while(rst!=0);
//cmd(0x01);
}
}
งานหา micro 14
Interfacing 16×2 LCD with 8051 Circuit Diagram
#include<reg51.h>
#define lcd P0
sbit rs=P2^0;
sbit e=P2^1;
void delay (int);
void cmd (char);
void display (char);
void custom (void);
void string (char *);
void init (void);
unsigned char custom_char[]= {0x00,0x04,0x0E,0x04,0x15,0x0E,0x04,0x00,
0x00,0x04,0x0E,0x0E,0x0E,0x1F,0x04,0x00,
0x00,0x0A,0x15,0x11,0x11,0x0A,0x04,0x00,
0x0E,0x11,0x11,0x1F,0x1B,0x1B,0x1B,0x1F,
0x0E,0x11,0x10,0x1F,0x1B,0x1B,0x1B,0x1F,
0x00,0x0E,0x15,0x1B,0x0E,0x0E,0x00,0x00,
};
void delay (int d)
{
unsigned char i;
for(;d>0;d--)
{
for(i=250;i>0;i--);
for(i=248;i>0;i--);
}
}
void cmd (char c)
{
lcd=c;
rs=0;
e=1;
delay(5);
e=0;
}
void display (char c)
{
lcd=c;
rs=1;
e=1;
delay(5);
e=0;
}
void custom (void)
{
int k;
cmd(0x40);
for(k=0;k<48;k++)
display(custom_char[k]);
cmd(0x80);
}
void string (char *p)
{
while(*p)
{
display(*p++);
}
}
void init (void)
{
cmd(0x38);
cmd(0x0c);
cmd(0x01);
cmd(0x80);
}
void main()
{
init();
custom();
string("Electronics Hub ");
cmd(0xc0);
string(" Presents ");
delay(2000);
cmd(0x01);
cmd(0x80);
string(" Custom Chars ");
cmd(0xc0);
string(" on 16x2 LCD ");
delay(2000);
cmd(0x01);
cmd(0x80);
string("ABCDEFGHIJKLMNOP");
cmd(0xc0);
string("1234567890");
cmd(0xca);
display(0);
display(1);
display(2);
display(3);
display(4);
display(5);
while(1);
}
งานหา micro 13
Voltmeter using 8051 Microcontroller
#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=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);
}
งานหา micro 12
Temperature Sensor Circuit
#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);
}
งานหา micro 11
PWM Based DC Motor Speed Control using Microcontroller
#include<reg51.h>
sbit PWM_Pin = P0^0;
sbit low = P0^4;
sbit medium = P0^5;
sbit high = P0^6;
sbit off = P0^7;
void InitPWM_timer(void);
unsigned char PWM = 0;
unsigned int temp = 0;
char a=1;
int main(void)
{
low=1;
medium=1;
high=1;
off=1;
PWM_Pin=0;
InitPWM_timer();
while(1)
{
if(low==0)
{
PWM=102;
a=0;
}
else if(medium==0)
{
PWM=153;
a=0;
}
else if(high==0)
{
PWM=255;
a=0;
}
else if(off==0)
{
a=1;
PWM_Pin=0;
}
}
}
void InitPWM_timer (void)
{
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = 0x00;
TL0 = 0x00;
ET0 = 1;
EA = 1;
TR0 = 1;
}
void Timer0_ISR (void) interrupt 1
{
TR0 = 0;
if(PWM_Pin==1 && a==0)
{
PWM_Pin = 0;
temp = (255-PWM);
TH0 = 0xFF;
TL0 = 0xFF - temp&0xFF;
}
else if(PWM_Pin==0 && a==0)
{
PWM_Pin = 1;
temp = PWM;
TH0 = 0xFF;
TL0 = 0xFF - temp&0xFF;
}
TF0 = 0;
TR0 = 1;
}
งานหา micro 10
Stepper Motor Control using 8051 Microcontroller
#include<reg51.h>
#define lcd P0
sbit rs=P2^0;
sbit e=P2^1;
sbit sw1=P1^2;
sbit sw2=P1^1;
sbit sw3=P1^3;
sbit sw4=P1^0;
sbit forward = P3^0;
sbit backward = P3^1;
sbit stop = P3^2;
void delay (int);
void cmd (unsigned char);
void display (unsigned char);
void string (char *);
void init (void);
void delay (int d)
{
unsigned char i;
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 *p)
{
while(*p)
{
display(*p++);
}
}
void init (void)
{
cmd(0x38);
cmd(0x0c);
cmd(0x01);
cmd(0x80);
}
void main()i
{
int z=0;
init();
P3=0xff;
P1=0x00;
abc:
cmd(0x80);
while(stop==0);
string("Press Forward Or");
cmd(0xc0);
string("Backward To Run");
forward=1;
backward=1;
while(1)
{
if(forward==0)
{
cmd(0x01);
cmd(0x80);
string("Running Forward");
while(forward==0);
while(1)
{
z++;
if(z==1)
{
sw1=1;sw2=0;sw3=0;sw4=0;delay(30);
if(backward==0 || stop==0)
break;
}
else if(z==2)
{
sw1=1;sw2=1;sw3=0;sw4=0;delay(30);
if(backward==0 || stop==0)
break;
}
else if(z==3)
{
sw1=0;sw2=1;sw3=0;sw4=0;delay(30);
if(backward==0 || stop==0)
break;
}
else if(z==4)
{
sw1=0;sw2=1;sw3=1;sw4=0;delay(30);
if(backward==0 || stop==0)
break;
}
else if(z==5)
{
sw1=0;sw2=0;sw3=1;sw4=0;delay(30);
if(backward==0 || stop==0)
break;
}
else if(z==6)
{
sw1=0;sw2=0;sw3=1;sw4=1;delay(30);
if(backward==0 || stop==0)
break;
}
else if(z==7)
{
sw1=0;sw2=0;sw3=0;sw4=1;delay(30);
if(backward==0 || stop==0)
break;
}
else if(z==8)
{
z=0;
sw1=1;sw2=0;sw3=0;sw4=1;delay(30);
if(backward==0 || stop==0)
break;
}
}
}
if(backward==0)
{
cmd(0x01);
cmd(0x80);
string("Running Backward");
while(backward==0);
while(1)
{
z++;
if(z==1)
{
sw1=1;sw2=0;sw3=0;sw4=1;delay(30);
if(forward==0 || stop==0)
break;
}
else if(z==2)
{
sw1=0;sw2=0;sw3=0;sw4=1;delay(30);
if(forward==0 || stop==0)
break;
}
else if(z==3)
{
sw1=0;sw2=0;sw3=1;sw4=1;delay(30);
if(forward==0 || stop==0)
break;
}
else if(z==4)
{
sw1=0;sw2=0;sw3=1;sw4=0;delay(30);
if(forward==0 || stop==0)
break;
}
else if(z==5)
{
sw1=0;sw2=1;sw3=1;sw4=0;delay(30);
if(forward==0 || stop==0)
break;
}
else if(z==6)
{
sw1=0;sw2=1;sw3=0;sw4=0;delay(30);
if(forward==0 || stop==0)
break;
}
else if(z==7)
{
sw1=1;sw2=1;sw3=0;sw4=0;delay(30);
if(forward==0 || stop==0)
break;
}
else if(z==8)
{
z=0;
sw1=1;sw2=0;sw3=0;sw4=0;delay(30);
if(forward==0 || stop==0)
break;
}
}
}
if(stop==0)
goto abc;
}
}
งานหา micro 9
Line Follower Robot using Microcontroller
#include<reg51.h>
sbit mot1=P2^0;
sbit mot2=P2^1;
sbit mot3=P2^2;
sbit mot4=P2^3;
sbit s_left=P2^6;
sbit s_right=P2^7;
void forward (void);
void backward (void);
void left (void);
void right (void);
void forward (void)
{
mot1=0;
mot2=1;
mot3=1;
mot4=0;
}
void backward (void)
{
mot1=0;
mot2=1;
mot3=0;
mot4=1;
}
void left (void)
{
mot1=0;
mot2=1;
mot3=0;
mot4=0;
}
void right (void)
{
mot1=0;
mot2=0;
mot3=1;
mot4=0;
}
void stop (void)
{
mot1=0;
mot2=0;
mot3=0;
mot4=0;
}
void main()
{
s_left=1;
s_right=1;
while(1)
{
if(s_left==0 && s_right==0)
{
forward();
}
else if(s_left==1 && s_right==1)
{
stop();
}
else if(s_left==0 && s_right==1)
{
left();
}
else if(s_left==1 && s_right==0)
{
right();
}
}
}
งานหา micro 8
Interfacing16X2 LCD with PIC Microcontroller
#define rs LATA.F0
#define rw LATA.F1
#define en LATA.F2
//LCD Data pins
#define lcdport LATB
#define rw LATA.F1
#define en LATA.F2
//LCD Data pins
#define lcdport LATB
void lcd_init();
void lcdcmd(unsigned char);
void lcddata(unsigned char);
unsigned char data[20]=”hello world”;
unsigned int i=0;
void lcdcmd(unsigned char);
void lcddata(unsigned char);
unsigned char data[20]=”hello world”;
unsigned int i=0;
void main(void)
{
TRISA=0; // Configure Port A as output port
LATA=0;
TRISB=0; // Configure Port B as output port
LATB=0;
lcd_init(); // LCD initialization
while(data[i]!=’\0′)
{
lcddata(data[i]); // Call lcddata function to send characters
// one by one from “data” array
i++;
Delay_ms(300);
}
}
{
TRISA=0; // Configure Port A as output port
LATA=0;
TRISB=0; // Configure Port B as output port
LATB=0;
lcd_init(); // LCD initialization
while(data[i]!=’\0′)
{
lcddata(data[i]); // Call lcddata function to send characters
// one by one from “data” array
i++;
Delay_ms(300);
}
}
void lcd_init()
{
lcdcmd(0x38);
lcdcmd (0x0C);
lcdcmd(0x01);
lcdcmd(0x06);
lcdcmd(0x80);
{
lcdcmd(0x38);
lcdcmd (0x0C);
lcdcmd(0x01);
lcdcmd(0x06);
lcdcmd(0x80);
}
void lcdcmd(unsigned char cmdout)
{
lcdport=cmdout;
rs=0;
rw=0;
en=1;
Delay_ms(10);
en=0;
}
{
lcdport=cmdout;
rs=0;
rw=0;
en=1;
Delay_ms(10);
en=0;
}
void lcddata(unsigned char dataout)
{
lcdport=dataout;
rs=1;
rw=0;
en=1;
Delay_ms(10);
en=0;
}
{
lcdport=dataout;
rs=1;
rw=0;
en=1;
Delay_ms(10);
en=0;
}
งานหา micro 7
Interfacing 7 Segment Display to 8051
(4-Digit – CA)
#include<reg51.h>
#define led P0
sbit sw1=P2^0;
sbit sw2=P2^1;
sbit sw3=P2^2;
sbit sw4=P2^3;
unsigned char ch[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//void delay (int);
void display (unsigned long int);
void sdelay (char);
/*void delay (int d)
{
unsigned char i;
for(;d>0;d--)
{
for(i=250;i>0;i--);
for(i=248;i>0;i--);
}
}*/
void sdelay (char d)
{
for(;d>0;d--);
}
void display (unsigned long int n)
{
led=ch[n/1000];
sw1=1;
sdelay(30);
sw1=0;
led=ch[(n/100)%10];
sw2=1;
sdelay(30);
sw2=0;
led=ch[(n/10)%10];
sw3=1;
sdelay(30);
sw3=0;
led=ch[n%10];
sw4=1;
sdelay(30);
sw4=0;
}
void main()
{
unsigned long int i=1;
while(1)
{
i=++i;
display(i);
if(i==9999)
i=0;
}
}
งานหา micro 6
Interfacing DC Motor with 8051 Microcontroller
#include<reg51.h>
sbit switch1=P2^0;
sbit switch2=P2^1;
sbit clk=P3^0;
sbit anticlk=P3^1;
void main()
{
switch1=switch2=1;
switch1=switch2=0;
clk=anticlk=0;
while(1)
{
if((switch1))
clk=1;
else if((switch2))
anticlk=1;
else
P3=0x00;
}
}
งานหา micro 5
MQ-2 gas sensor interfacing with pic microcontroller
// LCD module connections
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
////// MQ-2 gas sensor interfacing with pic microcontroller ///////
int gas_value;
char text[10];
void main(void)
{
ADC_Init(); // it will initialize the adc module of pic16f877a microcontroller
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,1,"MQ-2 sensor" ); // Write text in first
delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR); // Clear display
while(1)
{ // Endless loop
gas_value = ADC_Read(0); // It will read the gas value of sensor
if( gas_value > 400 )
Lcd_Out(1,1, "Gas detected" );
else
Lcd_Out(1,4, "No Gas " );
intToStr(gas_value, Ltrim(text));
Lcd_Out(2,1, text );
delay_ms(1000);
}
}
งานหา micro 4
Sine wave frequency measurement using pic microcontroller
// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections
char *freq = " 00";
void Display_Freq(unsigned int freq2write)
{
freq[1] = (freq2write/10) + 48; // Extract tens digit
freq[2] = (freq2write/1)%10 + 48; // Extract ones digit
// Display Frequency on LCD
Lcd_Out(2, 11, freq);
Lcd_Out(2,14,"Hz");
if(freq2write==50)
{
PORTA.F0 = 1;
PORTA.F1 = 0;
PORTA.F2 = 0;
}
else if(freq2write>50)
{
PORTA.F0 = 0;
PORTA.F1 = 1;
PORTA.F2 = 0;
}
else if(freq2write<50)
{
PORTA.F0 = 0;
PORTA.F1 = 0;
PORTA.F2 = 1;
}
}
void main()
{
TRISA.F0 = 0;
TRISA.F1 = 0;
TRISA.F2 = 0;
PORTA.F0 = 0;
PORTA.F1 = 0;
PORTA.F2 = 0;
OPTION_REG = 0b00101000; // set TOCKI as clock counter
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,"freqency controller");
while(1)
{
TMR0=0; // clear TMR0
Delay_ms(1000); // Delay 1 Sec
Lcd_Out(2,1,"FREQUENCY:");
Display_Freq(TMR0/2); // divide by 2
TMR0=0;
}// while
}// void main
งานหา micro 3
LCD INTERFACING WITH PIC16F877A MICROCONTROLLER
// LCD Module connections
sbit LCD_RS at RB1_bit; // it can only access a pin not a port
//sbit LCD_RS at LATB1_bit; //same as "sbit LCD_RS at RB1_bit;"
//sbit LCD_RS at LATB.B1; //SAME AS "sbit LCD_RS at RB1_bit;"
//sbit LCD_RS at LATB;
//sbit LCD_RS at PORTB1_bit;
//sbit LCD_RS at PORTB.B1;
//sbit LCD_RS at PORTB;
sbit LCD_EN at RB0_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D4 at RB2_bit;
// End LCD module connections
// LCD Pin direction
sbit LCD_RS_Direction at TRISB1_bit;
sbit LCD_EN_Direction at TRISB0_bit;
sbit LCD_D7_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB2_bit;
// End of LCD Pin direction
void main()
{
ANSELH = 0X00;
TRISB=0X00;
PORTB=0X00;
Lcd_Init();// Initialize LCD
Lcd_Cmd(_LCD_CLEAR);// Clear Display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor Off
while (1)
{
Lcd_Out(1,6,"LCD");// Write “LCD INTERFACE” in the first row
Delay_ms(1000);
Lcd_Out_Cp("Hello");
Delay_ms(1000);
Lcd_Chr(2, 7, 'i');
Delay_ms(1000);
Lcd_Chr_Cp('A');
Delay_ms(1000);
Lcd_Cmd(_LCD_RETURN_HOME);
Delay_ms(1000);
Lcd_Chr_Cp('B');
Delay_ms(1000);
Lcd_Cmd(_LCD_CURSOR_OFF) ;
Lcd_Chr_Cp('C');
Delay_ms(1000);
Lcd_Cmd(_LCD_UNDERLINE_ON) ;
Lcd_Chr_Cp('D');
Delay_ms(1000);
Lcd_Cmd(_LCD_BLINK_CURSOR_ON) ;
Lcd_Chr_Cp('E');
Delay_ms(1000);
Lcd_Cmd(_LCD_TURN_OFF) ;
Lcd_Chr_Cp('F');
Delay_ms(1000);
Lcd_Cmd(_LCD_TURN_ON) ;
Lcd_Chr_Cp('G');
Delay_ms(1000);
Lcd_Cmd(_LCD_SHIFT_LEFT) ;
Delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR);
Delay_ms(1000);
}
}
งานหา micro 2
Automatic control of street lights
Code
int light;
void read_ldr()
{
unsigned int adc_value=0;
adc_value=ADC_Read(0);
light = 100 – adc_value/10.24;
if(light>=80) // SWITCH of the light when light is 80 percent
{
PORTB.F1=0;
void read_ldr()
{
unsigned int adc_value=0;
adc_value=ADC_Read(0);
light = 100 – adc_value/10.24;
if(light>=80) // SWITCH of the light when light is 80 percent
{
PORTB.F1=0;
}
else
{
PORTB.F1=1;
else
{
PORTB.F1=1;
}
}
void main()
{
TRISB=0X00;
PORTB=0X00;
Adc_Init();
}
void main()
{
TRISB=0X00;
PORTB=0X00;
Adc_Init();
while (1)
{
read_ldr();
}
}
{
read_ldr();
}
}
งานหา micro 1
2 Digit Up/Down Counter Circuit
CODE
Code for 8051 Microcontroller
#include<reg51.h>
#define SEGMENT P0
sbit switch1=P3^0;
sbit switch2=P3^1;
sbit digit1=P2^0;
sbit digit2=P2^1;
void delay (int);
int x=0,y,z;
unsigned char ch[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
void delay (int d)
{
unsigned char i;
for(;d>0;d--)
{
for(i=250;i>0;i--);
for(i=248;i>0;i--);
}
}
void main()
{
switch1=1;
switch2=1;
digit1=1;
digit2=1;
while(1)
{
if(switch1==0)
{
x++;
delay(200);
}
else if(switch2==0)
{
x--;
delay(200);
}
y=x/10;
SEGMENT=ch[y];
digit1=0;
delay(10);
digit1=1;
z=x%10;
SEGMENT=ch[z];
digit2=0;
delay(10);
digit2=1;
}
}
Code for ATmega8 Microcontroller
/*
* updown_counter.c
* Author: ADMIN
*/
/*#define F_CPU 8000000UL*/
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0x00;
DDRC = 0xff;
DDRD = 0xff;
unsigned int i,x=0,y,z;
unsigned char arr1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
while(1)
{
if((PINB&0x01)==0x01)
{
x++;
_delay_ms(200);
}
else if ((PINB&0x02)==0x02)
{
x--;
_delay_ms(200);
}
{
y=x/10;
z=x%10;
PORTC=0x01;
PORTD=arr1[y];
_delay_ms(400);
PORTC=0x02;
PORTD=arr1[z];
_delay_ms(800);
}
}
}
วันอาทิตย์ที่ 16 กุมภาพันธ์ พ.ศ. 2563
micro 9
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);
}
micro 8
void main()
{
int i=3;
int j,k;
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++;
}
}
micro 7
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;
}
}
}
micro 6
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);
}
}
วันจันทร์ที่ 3 กุมภาพันธ์ พ.ศ. 2563
วงจรนับ (counter)
วงจรนับ (counter)
วงจรนับ
วงจรนับ (Counter)
เป็นวงจรที่ทำหน้าที่นับสัญญาณพัลส์ โดยให้ผลเป็นจำนวนนับ ซึ่งอาจ
เป็นรหัสเลขฐานสอง
รหัสเลขฐานสิบ หรือรหัสอื่นๆ วงจรนับมีการประยุกต์ใช้งานได้หลากหลาย
เช่นใช้ในวงจรนับจำนวนทั่วไป
วงจรนับความถี่ (Frequency Counter) วงจรฐานเวลา (Timebase)
เป็นต้น
วงจรนับประกอบด้วยฟลิปฟลอปหลายตัวมาต่อกัน
ลักษณะการต่อวงจรมี 2 แบบ จึงทำให้
ลักษณะของวงจรนับมี2
แบบ คือ
1. วงจรนับแบบไม่เข้าจังหวะหรือแบบอะซิงโครนัส
(Asynchronous Counter) วงจรนับ
แบบนี้มีการต่อฟลิปฟลอปเรียงกัน
ทำให้ฟลิปฟลอปทำงานไม่พร้อมกัน และมีการหน่วงเวลา
(Delay) เกิดขึ้น
ทำให้การนับสัญญาณที่มีความถี่สูง มีความผิดพลาดคลาดเคลื่อนจึงไม่เหมาะกบัการ
ใช้งานที่ความถี่สูง
แต่จดัเป็นวงจรที่ออกแบบได้ง่ายที่สุด
2.วงจรนับแบบเข้าจังหวะหรือแบบซิงโครนัส
(Synchronous Counter) วงจรนบัแบบนี้มี
การต่อฟลิปฟลอปทุกตัวให้ทา
งานพร้อมกนั จึงสามารถใช้กับสัญญาณที่มีความถี่สูงกว่าได้แต่มี
ความยุ่ง
ยากในการออกแบบมากกว่า
ลักษณะการนับของวงจรนับ
มี2 ลักษณะ คือ
1)การนับขึ้นหรือนับเดินหน้า
(Count Up) ให้จำนวนนับจากน้อยไปมากเช่น 0 - 1 - 2
2) การนับลงหรือนับถอยหลัง
(Count Down) ให้จำนวนนับจากมากมาน้อย เช่น 9 - 8 - 7
วงจรนับไบนารี่ แบบ Asynchronous
ตัวนับแบบ asynchronous
2 บิต ถูกแสดงดังในรูปข้างล่าง
สัญญาณนาฬิกาภายนอกถูกต่อกับขาอินพุตสัญญาณนาฬิกาของฟลิบฟล๊อบตัวแรก (FF0) เพียงตัวเดียวเท่านั้น ดังนั้น FF0 เปลี่ยนสถานะเมื่อที่ขอบขาลงของแต่ละพัลซ์
แต่ FF1 เปลี่ยนเพียงเมื่อทริกซ์โดยขอบขาลงของเอาท์พุต Q
ของ FF0 เนื่องจากการหน่วงเวลาที่เกิดข้างในผ่านฟลิบฟล๊อบ
การเปลี่ยนของพัลซ์สัญญาณนาฬิกาอินพุตและการเปลี่ยนแปลงของเอาท์พุต Q ของ FF0 ไม่สามารถที่จะเกิดขึ้นในเวลาเดียวกัน
ดังนั้นฟลิบฟล๊อบไม่สามารถถูกทริกซ์ทันทีทันใด
ซึ่งจะทำให้เกิดการทำงานแบบไม่ซิงโครนัส
รูปข้างล่างคือตัวนับไบนารี่แบบ
asynchronous แบบ 3 บิต
และไดอะแกรมทางเวลาสำหรับ 1 คาบ (one cycle) ตัวนับแบบ 3 บิตนี้ จะทำงานคล้ายกับแบบ 2 บิต ที่กล่าวถึงก่อนหน้านี้ ยกเว้นมันมี 8 สถานะ
ซึ่งทำโดยเพิ่มฟลิบฟล๊อบตัวที่ 3 เข้าไป
วงจรนับสิบ แบบ Asynchronous
วงจรนับแบบไบนารี่ซึ่งได้กล่าวก่อนหน้านี้
มีอยู่ด้วยกัน 2n สถานะ แต่วงจรนับที่มีสถานะน้อยกว่า 2n
ยังสามารถเกิดขึ้นได้
วงจรนับเหล่านี้ถูกออกแบบเพื่อให้มีจำนวนสถานะตามลำดับของมัน
ซึ่งถูกเรียกว่าลำดับซึ่งปัดออก
ลำดับเหล่านี้ทำได้โดยบังคับให้วงจรนับทำการรีไซเคิ้ลก่อนผ่านทุกสถานะปกติของมัน
เมื่อวงจรนับได้นับถึง
10 (1010) ฟลิบฟล๊อบทุกตัวจะถูกเคลียร์ สังเกตุว่าเพียง Q1
และ Q3 ถูกใช้เพื่อถอดรหัสการนับ 10 นี่ถูกเรียกว่าเป็นการถอดรหัสแบบบางส่วน เนื่องจากตั้งแต่ 0 ถึง 9 ไม่มีสถาวะไหนที่ Q1 และ
Q3 มีสถานะ High ในเวลาเดียวกัน
ลำดับของวงจรนับสิบถูกแสดงในตารางข้างล่าง
วงจรนับขึ้นลง แบบ
อะซินโครนัส ( Asynchronous Up-Down Counter)
ในการใช้งานบางอย่างวงจรนับต้องสามารถที่จะนับขึ้นและลง
วงจรข้างล่างเป็นวงจรนับขึ้นลงแบบ 3 บิต
มันนับขึ้นหรือลงซึ่งขึ้นอยู่กับสถานะของสัญญาณควบคุม ขึ้นและลง
เมื่ออินพุตของการนับขึ้นเป็น 1 อินพุตของการนับลงต้องเป็นศูนย์
วงจรแนนเกตระหว่าง FF0 และ FF1 จะส่งเอาท์พุตซึ่งไม่กลับขั้ว
(Q) ของ FF0 ไปสู่อินพุตสัญญาณนาฬิกา (clock
input) ของ FF1 ในทำนองเดียวกัน Q ของ FF1 จะถูกส่งผ่านวงจรแนนเกตอีกชุดหนึ่งไปสู่อินพุตสัญญาณนาฬิกาของ
FF2 จากหลักการนี้วงจรนับจะทำการนับขึ้น
เมื่ออินพุตที่ควบคุมการนับขึ้นอยู่ที่
0 และ อินพุตที่ควบคุมการนับลงอยู่ที่ 1 เอาท์พุตด้านกลับของ FF0 และ FF1 ถูกส่งไปให้กับ อินพุตสัญญาณนาฬิกาของ FF1 และ FF2
ตามลำดับ
วงจรนับแบบซิงโครนัส (Synchronous
Counters)
ในวงจรนับแบบซิงโครนัส
อินพุตที่รับสัญญาณนาฬิกาของฟลิบฟล๊อบทุกตัวถูกต่อด้วยกันและถูกทริกซ์ด้วยพัลซ์อินพุต
ด้วยเหตุนี้ฟลิบฟล๊อบทุกตัวจะเปลี่ยนสถานะไปพร้อมกัน (ในแบบขนาน)
วงจรข้างล่างเป็นวงจรนับแบบซินโครนัส 3 บิต อินพุต J และ K ของ FF0 ถูกต่อกับสัญญาณ
High FF1 มีอินพุต J และ K ของมัน ซึ่งต่ออยู่กับเอาท์พุตของ FF0 และ อินพุต J
และ K ของ FF2 ถูกต่อกับเอาท์พุตของเกตแอนซึ่งถูกป้อนโดยเอาท์พุตของ
FF0 และ FF1
ลองพิจารณาสิ่งที่เกิดขึ้นหลังจากพัลซ์ลูกที่
3 เอาท์พุตทั้งของ FF0 และ FF1 เป็น High ขอบขาขึ้นของพัลซ์นาฬิกาลูกที่ 4 จะทำให้ FF2 เปลี่ยนสถานะของมันเนื่องจากแอนเกต
ลำดับการนับสำหรับวงจรนับแบบ
3 บิต ถูกแสดงในตารางข้างล่าง
ข้อดีที่สำคัญมากของวงจรนับแบบซินโครนัส
คือ ไม่มีการหน่วงเวลาสะสมเนื่องจากฟลิบฟล๊อบทุกตัวถูกทริกซ์แบบขนาน
ด้วยเหตุนี้ความถี่ที่ทำงานได้สูงสุดสำหรับวงจรนับแบบนี้จะสูงกว่าในกรณีของ ripple
counter
วงจรนับสิบแบบซินโครนัส
(Synchronous Decade Counter)
คล้ายกันกับวงจรนับสิบแบบอะซินโครนัส
วงจรนับสิบแบบซินโครนัสนับจาก 0 ถึง 9 และ
ย้อนกลับไป 0 อีกครั้ง การย้อนกลับนี้ทำได้โดยการบังคับให้
สถาวะ 1010 กลับไปเป็นสภาวะ 0000 การนับแบบนี้สามารถถูกสร้างได้จากวงจรข้างล่าง
จากลำดับทางด้านซ้าย
เราจะสังเกตุได้ว่า
- Q0 สลับไปสลับมาทุกพัลซ์สัญญาณนาฬิกา
- Q1 เปลี่ยนสถานะที่พัลซ์นาฬิกาตัวถัดไปเมื่อ
Qo = 1 และ Q3 = 0
- Q2 เปลี่ยนสถานะที่พัลซ์นาฬิกาตัวถัดไปเมื่อ
Q0 = Q1 = 1
- Q3 เปลี่ยนสถานะที่พัลซ์นาฬิกาตัวถัดไปเมื่อ
Q0=1, Q1=1, and Q2=1 (count 7), or เมื่อ Q0=1 and
Q3=1 (count 9)
คุณลักษณะนี้ถูกทำขึ้นด้วยลอจิก
แอน/ออร์ ซึ่งต่อดังในรูปข้างบน
วงจรนับขึ้นลงแบบซินโครนัส
(Synchronous Up-Down Counter)
วงจรนับขึ้นลงแบบซินโครนัส
3 บิต และตารางของลำดับของมันถูกแสดงข้างล่าง
คล้ายกับวงจรนับขึ้นลงแบบอะซินโครนัส
วงจรนับขึ้นลงแบบซินโครนัสยังคงมีอินพุตควบคุมขึ้นลง
มันถูกใช้เพื่อควบคุมทิศทางของวงจรนับผ่านลำดับบางลำดับ
การทดสอบของตารางซีเควนซ์แสดง
- สำหรับทั้งซีเควนซ์ขึ้นและลง
Q0 สลับไปสลับมาทุกพัลซ์นาฬิกา
- สำหรับซีเควนซ์สำหรับนับขึ้น
Q1 เปลี่ยนสถานะทุกพัลซ์นาฬิกาตัวถัดไปเมื่อ Q0 =1
- สำหรับซีเควนซ์นับลง
Q1 เปลี่ยนสถานะที่พัลซ์นาฬิกาตัวถัดไปเมื่อ Q0 = 0
- สำหรับซีเควนซ์นับขึ้น
Q2 เปลี่ยนสถานะที่พัลซ์นาฬิกาตัวถัดไปเมื่อ Q0=Q1=1
- สำหรับซีเควนซ์นับลง
Q2 เปลี่ยนสถานะที่พัลซ์นาฬิกาตัวถัดไปเมื่อ Q0=Q1=0
สมัครสมาชิก:
ความคิดเห็น (Atom)




































