ESMELECTRONIC.IR
5.94K subscribers
217 photos
45 videos
108 files
262 links
‎آموزش میکروکنترلر و برنامه نویسی
✍️ مورد تایید ستاد ساماندهی پایگاه های اینترنتی
http://yon.ir/HFnkf
🌐تنها سایت رسمی کانال
http://esmelectronic.ir/
تبادل @amir7ece
@ESM_electronic. مدیریت و تبليغ
Download Telegram
Forwarded from عکس نگار
برنامه نویسی پروژه ESM121

🔷🔶 توضیحات خط به خط برنامه به زودی


//@AVR_ESMelectronic
#include <mega8.h>
#include <delay.h>
#asm
.equ __lcd_port=0x12 ;// PORTD
#endasm
#include <lcd.h>
#define c1 PINB.4
#define c2 PINB.5
#define c3 PINB.6
#define c4 PINB.7
flash char row[]={0xfe,0xfd,0xfb,0xf7};
flash char data_key[]={
'1','2','3','A',
'4','5','6','B',
'7','8','9','C',
'*','0','#','D'};
unsigned char ac,table;
unsigned int r;
//________________________________________
void keypad(){
lcd_gotoxy(0,1);
lcd_putsf("~");
while (1){
for (r=0;r<4;r++){
ac=4;
PORTB=row[r];
DDRB=0x0f;
if (c1==0) ac=0;
if (c2==0) ac=1;
if (c3==0) ac=2;
if (c4==0) ac=3;
if (!(ac==4)){
table=data_key[(r*4)+ac];
lcd_putchar(table);
while (c1==0){}
while (c2==0){}
while (c3==0){}
while (c4==0){}
delay_ms(50);
}
}
}
}
//_________________________________________
void main(){
PORTB=0xff;
DDRB=0x0f;
lcd_init(16);
lcd_gotoxy(1,0);
lcd_putsf("ESM electronic");
keypad();
while(1){
};
}



🆔https://telegram.me/joinchat/BKznVz-h5UTfoA5DzTMtDw
🔳 کد برنامه ESM122



//@AVR_ESMelectronic
#include ᐸmega16.h>
#include ᐸstdio.h>
#include ᐸdelay.h>
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include ᐸlcd.h>
#define Up PIND.0
#define Down PIND.1
#define Enter PIND.2
#define high_LED PORTA.1
unsigned char compare=0,set=0xff;
float temp;
//__________________________________________
void display(){
char lcd_buf[32];
sprintf(lcd_buf,"Temp=%3.1f\xdfC\nHigh Temp=%i",temp,compare);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(lcd_buf);
lcd_gotoxy(13,1);
if(high_LED==1) lcd_putsf("on ");
if(high_LED==0) lcd_putsf("off");
}
//_________________________________________
interrupt [ADC_INT] void adc_isr(void){
unsigned int adc_data;
adc_data=ADCW;
temp=adc_data*2.56/1024;
temp=temp*100;
if(temp>=set) high_LED=1;
else high_LED=0;
}
//_________________________________________up
void inc_set_temp(){
if(compareᐸ99) compare++;
}
//__________________________________________Down
void dec_set_temp(){
if(compare!=0) compare--;
}
//__________________________________________
void main(){
PORTD=0XFF;
DDRD=0X00;
PORTA.1=0;
DDRA.1=1;
ACSR=0XC0;
SFIOR=0X00;
ADMUX=0XC0;
ADCSRA=0X8F;
lcd_init(16);
#asm("sei")
ADCSRA=0XCF;
while(1){
display();
delay_ms(250);
ADCSRA=0XCF;
if(Up==0) inc_set_temp();
if(Down==0) dec_set_temp();
if(Enter==0) set=compare;
};
}



🆔 https://telegram.me/joinchat/BKznVz-h5UTfoA5DzTMtDw
//@AVR_ESMelectronic
#include ᐸmega8.h>
#include ᐸdelay.h>
void main(){
#define DOOR PINB.0
#define TELEPHONE PORTB.1
#define ALARM PORTB.2
DDRB.0=1;
DDRB.1=1;
DDRB.2=1;
while(1){
if (DOOR==1) {
TELEPHONE=1 ;
delay_ms(3000) ;
TELEPHONE=0 ;
delay_ms(10) ;
ALARM=1 ;
delay_ms(40000) ;
ALARM=0 ;
delay_ms(50) ;
};
}
}
✔️ کد برنامه نویسی پروژه ESM132
این برنامه در محیط Arduino

#include<LiquidCrystal.h>
LiquidCrystal lcd(6,7,8,9,10,11);

#define Fan 3
#define Light 4
#define TV 5

int temp=0,i=0;
int led=13;

char str[15];
void setup()
{
  lcd.begin(16,2);
  Serial.begin(9600);
  pinMode(led, OUTPUT);
   pinMode(Fan, OUTPUT);
    pinMode(Light, OUTPUT);
     pinMode(TV, OUTPUT);
  
  lcd.setCursor(0,0);
  lcd.print("GSM Control Home");
  lcd.setCursor(0,1);
  lcd.print("   Automaton    ");
  delay(2000);
  lcd.clear();
  lcd.print("Esm Electronic");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print("System Ready");
  Serial.println("AT+CNMI=2,2,0,0,0");
  delay(500);
  Serial.println("AT+CMGF=1");
  delay(1000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Fan   Light  TV ");
  lcd.setCursor(0,1);
  lcd.print("OFF    OFF   OFF "); 
}

void loop()
{
  lcd.setCursor(0,0);
  lcd.print("Fan   Light  TV");
  if(temp==1)
  {
    check();
    temp=0;
    i=0;
    delay(1000);
  }
}

 void serialEvent() 
 {
  while(Serial.available()) 
  {
    if(Serial.find("#A."))
    {
      digitalWrite(led, HIGH);
      delay(1000);
      digitalWrite(led, LOW);
      while (Serial.available()) 
      {
      char inChar=Serial.read();
      str[i++]=inChar;
      if(inChar=='*')
      {
        temp=1;
        return;
      } 
      } 
    }
   }
 }

void check()
{
   if(!(strncmp(str,"tv on",5)))
    {
      digitalWrite(TV, HIGH);
      lcd.setCursor(13,1); 
      lcd.print("ON    ");
      delay(200);
    }  
   
   else if(!(strncmp(str,"tv off",6)))
    {
      digitalWrite(TV, LOW);
      lcd.setCursor(13,1); 
      lcd.print("OFF    ");
      delay(200);
    }
  
    else if(!(strncmp(str,"fan on",5)))
    {
      digitalWrite(Fan, HIGH);
      lcd.setCursor(0,1); 
      lcd.print("ON   ");
      delay(200);
    }
 
    else if(!(strncmp(str,"fan off",7)))
    {
      digitalWrite(Fan, LOW);
      lcd.setCursor(0,1); 
      lcd.print("OFF    ");
      delay(200);
    }
 
    else if(!(strncmp(str,"light on",8)))
    {
      digitalWrite(Light, HIGH);
      lcd.setCursor(7,1); 
      lcd.print("ON    ");
      delay(200);
    }
 
    else if(!(strncmp(str,"light off",9)))
    {
      digitalWrite(Light, LOW);
      lcd.setCursor(7,1); 
      lcd.print("OFF    ");
      delay(200);
    } 
    
    else if(!(strncmp(str,"all on",6)))
    {
      digitalWrite(Light, HIGH);
      digitalWrite(Fan, HIGH);
      digitalWrite(TV, HIGH);
      lcd.setCursor(0,1); 
      lcd.print("ON     ON    ON  ");
      delay(200);
    }
 
    else if(!(strncmp(str,"all off",7)))
    {
      digitalWrite(Light, LOW);
      digitalWrite(Fan, LOW);
      digitalWrite(TV, LOW);
      lcd.setCursor(0,1); 
      lcd.print("OFF   OFF    OFF  ");
      delay(200);
    }     
}
💻 برنامه نوشته شده توسط متین صالحیان

#include <mega16.h>
#include <alcd.h>
#include <stdio.h>
#include <delay.h>
#define START PINB.1
#define RELAY PORTB.0
char s,m,h,day,lcd_buffer[9];
bit flag_start=0,count;
interrupt [TIM2_OVF] void timer2_ovf_isr(void){
if(flag_start==1)s++;
}
void main(void){
{
PORTB=0x02;
DDRB=0x01;
ASSR=0x08;
TCCR2=0x05;
TCNT2=0x00;
OCR2=0x00;
TIMSK=0x40;
lcd_init(16);
#asm("sei")
}
while (1){
if(!START){delay_ms(50);if(!START)flag_start=1;}
if(flag_start){
if(s>=60){s=0;m++;}
if(m>=60){m=0;h++;}
if(h>=24){h=0;day++;}

if(h==2 && m==10 && s==50){RELAY=1;count=1;}
if(count==1 && ((h-2)%3)==1 && m==10 && s==50)RELAY=0;
if(count==1 && ((h-2)%3)==0 && m==10 && s==50)RELAY=1;
}
sprintf(lcd_buffer,"%2d:%2d:%2d",h,m,s);
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
}
}


💢 توضیحات خط به خط این برنامه فردا خدمت دوستان ارائه می گردد💢
✔️ توضیحات خط به خط برنامه آقای متین صالحیان👇


#include ᐸmega16.h>
//کتابخانه مربوط به میکرو کنترلر
#include ᐸalcd.h>
//کتابخانه مربوط به lcd
#include ᐸstdio.h>
//کتابخونه ورودی و خروحی های استاندارد
#include ᐸdelay.h>
//وقفه

#define START PINB.1
//تعیین کردن پین b.1 به عنوان کلید استارت

#define RELAY PORTB.0
//تعیین کردن پورت b.0 بعنوان رله

//متغیر ها
char s,m,h,day,lcd_buffer[9];
bit flag_start=0,count;

//وقفه تايمر 2
//اين وقفه هر 1 ثانيه يکبار فراخواني ميشود
interrupt [TIM2_OVF] void timer2_ovf_isr(void){

//در صورتي که اجازه شمارش داشتي يک عدد به ثانيه اضافه کن
if(flag_start==1)s++;
}

void main(void){
{
// تعريف کردن پورت B.0 به عنوان خروجي
//فعال کردن pull up براي پين B.1
PORTB=0x02;
DDRB=0x01;

//مقدار دهي به رجيستر هاي مربوط تايمر
ASSR=0x08;
TCCR2=0x05; //تقسيم فرکانسي مربوط به تايمر 2
TCNT2=0x00;
OCR2=0x00;

TIMSK=0x40;//وقفه هاي مربوط به تايمر


lcd_init(16);

#asm("sei") //فعال سازي وقفه هاي کلي
}
while (1){
// درصورتي که کليد استارت زده شد فلک استارت را برابر 1 ميکنيم
//اين فلگ در وقفه تايمر وجود داشت و به ما اجازه ميداد که شمارش را انجام بدهيم يا نه
if(!START){delay_ms(50);if(!START)flag_start=1;}


if(flag_start){//درصورتي که اجازه شمارش داشتيم

//مقدار دهي به متغير هاي ثاني دقيقه و ساعت
if(s>=60){s=0;m++;}
if(m>=60){m=0;h++;}
if(h>=24){h=0;day++;}

//اولين روشن شدن راس ساعت 2:10:50 اتفاق ميوفتد ، در صورتي که به اين زمان رسيديم رله را فعال کن
//پس از فعال سازي رله بيت شمارش را فعال کن تا تايمر به صورت اتوماتيک رله را فعال و غير فعال کند
if(h==2 && m==10 && s==50){RELAY=1;count=1;}

//با کمي دقت ميتوانيم به اين فرمول برسيم :
// اگر ساعت -2 مضربي از 3 باشد بايد رله را فعال کرد
// اگر ساعت -2 ، مضربي از 3 با باقي مانده 1 باشد بايد رله را غير فعال کرد

// يعني : (h-2)/3 = 3x+y ->
//xخارج قسمت و y باقي مانده است ، در صورتي که h-2 مضربي از 3 باشد y برابر 0 ميشود و در غير اين صورت عددي برابر 1 ويا 2 ميشود
//نکته : دستور % اين باقيمانده را محاسبه ميکند
//پس اگر (h-2)%3)==1 رله را غيرفعال کن
// اگر (h-2)%3)==0 رله را فعال کن

if(count==1 && ((h-2)%3)==1 && m==10 && s==50)RELAY=0;
if(count==1 && ((h-2)%3)==0 && m==10 && s==50)RELAY=1;
}

//ساعت ، دقيقه و ثانيه را نمايش بده
sprintf(lcd_buffer,"%2d:%2d:%2d",h,m,s);
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
}
}
ESMELECTRONIC.IR
اطلاعات برنامه نویسی این پروژه درحال تکمیل است و بزودی در اختیار دوستان قرار خواهد گرفت
#include <mega16.h>
#include <stdio.h>

#define Lamp1 PORTC.0
#define Lamp2 PORTC.1
#define Lamp3 PORTC.2
#define Lamp4 PORTC.3
#define Lamp5 PORTC.4
#define Lamp6 PORTC.5
#define Lamp7 PORTC.6
#define Lamp8 PORTC.7

char val;


void main(void)
{
PORTC=0x00;
DDRC=0xFF;

PORTD=0x00;
DDRD=0x00;

UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;

while (1)
{
// Place your code here
val=getchar();
if(val=='1'){
Lamp1=1;
}else
if(val=='2'){
Lamp2=1;
}else
if(val=='3'){
Lamp3=1;
}else
if(val=='4'){
Lamp4=1;
}else
if(val=='5'){
Lamp5=1;
}else
if(val=='6'){
Lamp6=1;
}else
if(val=='7'){
Lamp7=1;
}else
if(val=='8'){
Lamp8=1;
}
else
if(val=='9'){
Lamp1=1;
Lamp2=1;
Lamp3=1;
Lamp4=1;
Lamp5=1;
Lamp6=1;
Lamp7=1;
Lamp8=1;
}else
if(val=='A'){
Lamp1=0;
}else
if(val=='B'){
Lamp2=0;
}else
if(val=='C'){
Lamp3=0;
}else
if(val=='D'){
Lamp4=0;
}else
if(val=='E'){
Lamp5=0;
}else
if(val=='F'){
Lamp6=0;
}else
if(val=='G'){
Lamp7=0;
}else
if(val=='H'){
Lamp8=0;
}else
if(val=='I'){
Lamp1=0;
Lamp2=0;
Lamp3=0;
Lamp4=0;
Lamp5=0;
Lamp6=0;
Lamp7=0;
Lamp8=0;
}

}
}
#include <mega8.h>
#include <delay.h>

#define BUT_A PINB.0
#define BUT_B PINB.1
#define BUT_C PINB.2

#define LED_A PORTD.0
#define LED_B PORTD.1
#define LED_C PORTD.2

void main(void)
{
unsigned int d;
PORTB=0x07;
DDRB=0x00;
PORTD=0x00;
DDRD=0x07;

while (1)
{
if(BUT_A==0)
{
delay_ms(50);
LED_A = !LED_A;
while(BUT_A==0);
}
if(BUT_B==0)
{
delay_ms(50);
LED_B = !LED_B;
while(BUT_B==0);
}
if(BUT_C==0)
{
d=0;
while(BUT_C==0)
{
delay_ms(1);
if(++d>1999) break;
}
if(d>1999) LED_C=1;
else LED_C=0;
while(BUT_C==0);
}
}
}


https://telegram.me/joinchat/BKznVz-h5UTfoA5DzTMtDw
/*****************************************************
@AVR_ESMELECTRONIC
WWW.ESMELECTRONIC.COM
*****************************************************/

#include <mega32a.h>
#include <stdio.h>
#include <delay.h>
#include <alcd.h>

#define write_data PORTC.1
#define read_data PINC.1
#define data_line DDRC.1
#define sck PORTC.0
#define sck_line DDRC.0
#define output 1
#define input 0
#define ack 0
#define nack 1
#define Measure_Temperature 0x03
#define Measure_Humidity 0x05
#define Read_Status_Register 0x07
#define Write_Status_Register 0x06
#define Soft_Reset 0x1E

//@AVR_ESMELECTRONIC

char buffer[16];
const float c1=-2.0468; //12bit
const float c2=0.0367; //12bit
const float c3=0.0000015955; //12bit
const float t1=0.01; //12bit
const float t2=0.00008; //12bit
const float d1=-40.1; //14bit
const float d2=0.01; //14bit

//@AVR_ESMELECTRONIC

float SOT,SORH;
float Temperature;
float RH_linear,RH_true;

//@AVR_ESMELECTRONIC

unsigned int read_sht(unsigned char cmd)
{
unsigned char i,CRC,m=128;
unsigned int sht_data;
data_line=output;
sck_line=output;
delay_ms(2);

//reset sequence
write_data=1;
sck=0;
delay_us(10);
for(i=0;i<10;i++)
{
sck=1;
delay_us(10);
sck=0;
delay_us(10);
}

//transmission START
write_data=1;
sck=1;
delay_us(10);
write_data=0;
sck=0;
delay_us(10);
sck=1;
delay_us(10);
write_data=1;
sck=0;
delay_us(10);

//Transmit command
for(i=0;i<8;i++)
{
if(m&cmd)
write_data=1;
else
write_data=0;
delay_us(5);
sck=1;
delay_us(10);
sck=0;
delay_us(10);
m»=1;
}

//Check acknowledge
data_line=input;
sck=1;
delay_us(10);
if(read_data==nack);
return 0;
sck=0;
delay_us(10);
while(read_data==ack);

// Wait until data is ready
while(read_data==1);

//Get MSB byte
for(i=0;i<8;i++)
{
sht_data«=1;
sck=1;
delay_us(10);
if(read_data==1)
sck=0;
delay_us(10);
}

//Send acknowledge
data_line=output;
write_data=ack;
delay_us(5);
sck=1;
delay_us(10);
sck=0;
delay_us(10);

//Get LSB byte
data_line=input;
for(i=0;i<8;i++)
{
sht_data«=1;
sck=1;
delay_us(10);
if(read_data==1)
sck=0;
delay_us(10);
}

//@AVR_ESMELECTRONIC
//Send acknowledge
data_line=output;
write_data=ack;
delay_us(5);
sck=1;
delay_us(10);
sck=0;
delay_us(10);

//Get CRC-8
data_line=input;
for(i=0;i<8;i++)
{
CRC«=1;
sck=1;
delay_us(10);
if(read_data==1)
CRC|=1;
sck=0;
delay_us(10);
}

//Skip acknowledge to end transmission
data_line=output;
sck=1;
delay_us(10);
sck=0;
delay_us(10);

return sht_data;
}
//@AVR_ESMELECTRONIC
void main(void)
{
//Characters/line:16
lcd_init(16);

while(1)
{
//place your code here
lcd_clear();
lcd_gotoxy(0,0);
sprintf(buffer,"Temp:%3.1fC",Temperature);
lcd_puts(buffer);
lcd_gotoxy(0,1);
sprintf(buffer,"Humidity:%3.1f%%",RH_true-3);
lcd_puts(buffer);

delay_ms(1000);

SOT=read_sht(Measure_Temperature);
delay_ms(200);
SORH=read_sht(Measure_Humidity);

Temperature=d1+d2*SOT;
RH_linear=c1+c2*SORH+c3*SORH*SORH;
RH_true=(Temperature-25)*(t1+t2*SORH)+RH_linear;
}
}