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

در زیر برنامه ای در ادامه آموزش کار با LCD1602 ارئه شده که شما میتوانید این برنامه را در میکروکنترلر مدار شماره ESM119 پروگرام کنید.

🔷🔷 مطالب آموزشی که در برنامه وجود دارد شامل:

راه اندازی دو ردیف از LCD
ایجاد کاراکتر # هشتک به صورت چشمک زن


در ادامه آموزشها نحوه برقراری ارتباط بین کیبورد و ال سی دی را فرا خواهیم گرفت و میتوانیم از طریق کیبورد و نمایش اطلاعات بر روی ال سی دی یک رابط خوب و کارآمد بین کاربر و بردهای الکترونیکی خود ایجاد کنیم.



🙏🙏 دوستان لطفا با فوروارد مطالب به گروه ها و دوستان خود ما را حمایت کنید با تشکر از حضورتان🍃🌺🍃




//@AVR_ESMelectronic
#include ᐸmega8.h>
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include ᐸlcd.h>
void main(void){
lcd_init(16);
lcd_clear();
lcd_gotoxy(2,0);
lcd_putsf("Welcome");
lcd_gotoxy(5,1);
lcd_putsf("to Channel");
lcd_gotoxy(14,0);
lcd_putchar('#');
lcd_gotoxy(14,0);
_lcd_ready();
_lcd_write_data(0x0f);
while (1){
};
}
📘 @AVR_esmelectronic
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
🔘 جواب اصلی #چالش_شماره2
توسط مهندس محسن فیض الهی (برنامه نویس درجه یک و بی ادعا)

/*@AVR_ESMelectronic*/
#include ᐸmega16.h>
#include ᐸdelay.h>
#include ᐸstdio.h>
#include ᐸalcd.h>
bit F;
char lcd[32];
unsigned char m=0,s=0,c=0;
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
s++;
if(s==60){
s=0;
m++;
}

if(m==60){
m=0;
c++;
}

if(c==12){
c=0;
}
sprintf(lcd,"%2d:%2d:%2d",c,m,s);
lcd_gotoxy(4,0);
lcd_puts(lcd);
}
void main(void)
{
DDRB=0X01;
PORTB=0X02;
ASSR=0x08;
TCCR2=0x05;
TCNT2=0x00;
OCR2=0x00;

TIMSK=0x40;

lcd_init(16);
lcd_putsf("Enter Start");

while (1)
{
if(PINB.1==0){
delay_ms(20);
while(PINB.1==0);
lcd_clear();
#asm("sei")
}

if(c==2 && m==10 && s==50)
F=1;


if(c==3 && m==10 && s==50)
F=0;

if(c==5 && m==10 && s==50)
F=1;

if(c==6 && m==10 && s==50)
F=0;

if(c==8 && m==10 && s==50)
F=1;

if(c==9 && m==10 && s==50)
F=0;

if(c==11 && m==10 && s==50)
F=1;

if(c==12 && m==10 && s==50)
F=0;

PORTB.0=F;
}
}
💻 برنامه نوشته شده توسط متین صالحیان

#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);
}
}
#include <mega32.h>
#include <delay.h>
//PORTD.0=A;PORTD.1=B;PORTD.2=C; OUTPUT
//PORTB.0=A;PORTB.1=B;PORTB.2=C; INPUT
void delay (void);
int i,s,j,d=0,a=0,b=0;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if(PINB.2==0){
TCNT0=0x06;
i++;
if(i>=125&&PINB.2==0){s++;i=0;}//i>=125...1 s generate //f=8mhz//n=256//
if(s==2){PORTD.2=1;s=0;j=1;} }//2 s
if(j==1&&PINB.2==1){d=1;j=0;}
}
void main(void)
{
PORTD=0x00;
DDRD=0xFF;
PORTB=0x00;
DDRB=0x00;
TCCR0=0x00;
TCNT0=0x06;
OCR0=0x00;
TIMSK=0x01;
#asm("sei")
while (1)
{
if(PINB.0==0&&a==0){PORTD.0=1;a=1;delay_ms(300);}
if(PINB.0==0&&a==1){PORTD.0=0;delay_ms(300);a=0;}
if(PINB.1==0&&b==0){PORTD.1=1;b=1;delay_ms(300);}
if(PINB.1==0&&b==1){PORTD.1=0;delay_ms(300);b=0;}
if(PINB.2==0&&d==0)delay();
if(PINB.2==0&&d==1){PORTD.2=0x00;d=0;delay_ms(300);}
}
}void delay (void)
{ TCCR0=0x04;
TCNT0=0x06;
while(!TIFR&0x01);
TIFR=TIFR|0X01;
}


https://telegram.me/joinchat/BKznVz-h5UTfoA5DzTMtDw