(حل و پاسخ تمارین آز ریزپردازنده)
Practice 1 #
Use 8 LED and light them up in simulator
CODE #
/*
* Flasher.c
*
* Created: 9/29/2024 11:13:44 AM
* Author: AMIR-MOHAMMAD-SAFARI
*/
#include <delay.h>
#include <mega32.h>
int i;
void main(void) {
DDRD = 0xFF; // Set PORTD as output
while (1) {
// First loop to shift bits from 1 to 128
for (i = 1; i <= 128; i = i * 2) {
PORTD = i;
delay_ms(100);
}
// Second loop to shift bits from 64 back to 1
for (i = 64; i >= 1; i = i / 2) {
PORTD = i;
delay_ms(100);
}
}
}
Schematic #
Practice 2 #
Light up the LED Counter in simulator
- 0 to 9
- 9 to 0
- Speed of counting
- Count 0 to 5
CODE 0 to 9 and 9 to 0 #
/*
* CounterLED.c
*
* Created: 10/6/2024 9:43:52 AM
* Author: AMIR-MOHAMMAD-SAFARI
*/
#include <mega32.h>
#include <stdio.h>
#include <delay.h>
void main (void) {
DDRC.0 = 0;
DDRA = 0xFF;
while(1) {
if (PINC.0 == 1) {
int i = 0;
while(i < 10) {
PORTA = i;
i++;
delay_ms(50); // Speed 50 MS
}
}
else {
int i = 9;
while(i >= 0) {
PORTA = i;
i--;
delay_ms(50); // Speed 50 MS
}
}
}
}
Changes that count 0 to 5
while(i < 5) {
PORTA = i;
i++;
delay_ms(50);
}
else {
int i = 5;
while(i >= 0) {
PORTA = i;
i--;
delay_ms(50);
}
}
Schematic #
Practice 3 #
Algorithm that show Sum and Multiply of numbers and show on LED
We have 4 SW_SPDT
- A0 and A1
- B0 and B1
Currect project is on ATMEGA32
CODE #
/*
* LED_StarPlus.c
*
* Created: 10/13/2024 8:23:08 AM
* Author: JARVIS
*/
#include <mega32.h>
#include <stdio.h>
#include <delay.h>
void main (void) {
DDRD = 0xFF;
DDRC.0 = 0;
DDRA = 0x00;
DDRB = 0x00;
while (1) {
if (PINC.0 == 1) {
PORTD = PINA + PINB;
}
else {
PORTD = PINA * PINB;
}
}
}
Schematic #
Practice 4 #
Showing something on LCD, which is LM016L. We can even clear screen or change position of things on LCD.
Currect project is on ATMEGA32
CODE #
/*
* LCD_16Bit_Code_C.c
*
* Created: 10/20/2024 8:13:19 AM
* Author: JARVIS
*/
#include <mega32.h>
#include <stdio.h>
#include <delay.h>
#asm
.equ __lcd_port = 0x18;
#endasm
#include <lcd.h>
void main(void) {
PORTB = 0x00;
DDRB = 0x00;
lcd_init(16);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Amir Mohammad");
lcd_gotoxy(9,1);
lcd_putsf("Safari");
}
Schematic #
SCROLLER Practice 4 - 1 #
CODE #
/*
* LCD_16Bit_Code_C_Move.c
*
* Created: 10/20/2024 10:37:27 AM
* Author: JARVIS
*/
#include <mega32.h>
#include <stdio.h>
#include <delay.h>
#asm
.equ __lcd_port = 0x18;
#endasm
#include <lcd.h>
void main(void) {
char name[] = "Amir Mohammad Safari ";
int len = 23;
int i;
PORTB = 0x00;
DDRB = 0x00;
lcd_init(32);
while (1) {
for (i = 0; i < len - 1; i++) {
lcd_clear();
lcd_gotoxy(0, 0);
lcd_puts(&name[i]);
delay_ms(20);
}
}
}
Credit #
- Mr. Hamed Sarbazi (Teacher)
- Mr. Amir Mohammad Safari (TA)