Tải bản đầy đủ (.docx) (40 trang)

bài tập vi xử lí

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (389.72 KB, 40 trang )

BÀI TẬP
1.
Thực hiện kết nối phần cứng và viết chương trình nhận dữ liệu từ hai nút
nhấn, mỗi nút nhấn làm LED sáng chạy theo một chiều. (1 con sáng chạy)
#include <mega16.h>
#include <delay.h>
int x,y,i;
void main(void)
{
DDRC=0xFF;
DDRA=0x00;
PORTA=0xFF;
while (1)
{
if(PINA.0==0)
{x=0b00000001;
for(i=0;i<8;i++)
{
PORTC=x;
delay_ms(100);
x=(x<<1);
}
}
if(PINA.1==0)
{
y=0b10000000;
for(i=0;i<8;i++)
{
PORTC=y;



delay_ms(100);
y=y>>1;
}
}
}
}
2.
Thực hiện kết nối phần cứng và viết chương trình nhận dữ liệu từ hai nút
nhấn, mỗi nút nhấn làm LED sáng dần theo một chiều.
#include <mega16.h>
#include <delay.h>
int x,y,i;
void main(void)
{
DDRC=0xFF;
DDRA=0x00;
PORTA=0xFF;
while (1)
{
if(PINA.0==0)
{x=0b00000001;
for(i=0;i<8;i++)
{
PORTC=x;
delay_ms(100);
x=(x<<1)+0b00000001;
}
}



if(PINA.1==0)
{
y=0b10000000;
for(i=0;i<8;i++)
{
PORTC=y;
delay_ms(100);
y=(y>>1)+0b10000000;
}
}
}
}
3.
Thực hiện kết nối phần cứng và viết chương trình nhận dữ liệu từ hai nút
nhấn, mỗi nút nhấn làm số LED sáng chạy theo một chiều tăng dần.
#include <mega16.h>
#include <delay.h>
int x,y,x1,y1,i,j;
void main(void)
{
DDRC=0xFF;
DDRA=0x00;
PORTA=0xFF;

while (1)
{


x1=0b10000000;
y1=0b00000001;

for(i=0;i<8;i++)
{
if(PINA.0==0)
{
x=x1;
for (j=8-i;j>0;j--)
{
PORTC=x;
x=x>>1;
delay_ms(50);
}
x1=(x1>>1)+0b10000000;
}
if(PINA.1==0)
{
y=y1;
for (j=8-i;j>0;j--)
{
PORTC=y;
y=y<<1;
delay_ms(50);
}
y1=(y1<<1)+0b00000001;
}
}
}


}
4.

Thực hiện kết nối phần cứng và viết chương trình nhận dữ liệu từ hai nút
nhấn, mỗi nút nhấn làm LED sáng dồn theo một chiều (1 LED sáng chạy rồi giữ lại
để sáng dần cho tới hết)
#include <mega16.h>
#include <delay.h>
int x,y,i,j;
void main(void)
{
DDRC=0xFF;
DDRA=0x00;
PORTA=0xFF;
while (1)
{
if(PINA.0==0)
{
y=0b00000000;
for(i=0;i<8;i++)
{
x=0b10000000;
for(j=8-i;j>0;j--)
{
PORTC=x+y;
delay_ms(50);
x=x>>1;
}
y=PORTC;


}
}


if(PINA.1==0)
{
y=0b00000000;
for(i=0;i<8;i++)
{
x=0b00000001;
for(j=8-i;j>0;j--)
{
PORTC=x+y;
delay_ms(50);
x=x<<1;
}
y=PORTC;
}
}
}
}
5.
Thực hiện kết nối phần cứng và viết chương trình nhận dữ liệu từ hai nút
nhấn, một nút nhấn làm LED sáng dần từ hai bên vào, một nút nhấn làm LED sáng
dần từ giữa ra.
#include <mega16.h>
#include <delay.h>
int x,y,i;
void main(void)


{
DDRC=0xFF;

DDRA=0x00;
PORTA=0xFF;
while (1)
{
if(PINA.0==0)
{
x=0b00000001;
y=0b10000000;
for(i=0;i<4;i++)
{ PORTC=x+y;
delay_ms(50);
x=x<<1;
y=y>>1;
}
}
if(PINA.1==0)
{
x=0b00001000;
y=0b00010000;
for(i=0;i<4;i++)
{ PORTC=x+y;
delay_ms(50);
x=(x>>1)+0b00001000;
y=(y<<1)+0b00010000;
}
}


}
}

6.
Thực hiện kết nối phần cứng và viết chương trình nhận dữ liệu từ hai nút
nhấn, một nút nhấn làm số LED sáng chạy từ hai bên vào giữa, một nút làm số LED
sáng chạy từ giữa ra hai bên tăng dần.
#include <mega16.h>
#include <delay.h>
int x,y,i,j,x1,y1;
void main(void)
{
DDRC=0xFF;
DDRA=0x00;
PORTA=0xFF;
while (1)
{
if(PINA.0==0)
{
x=0b00000001;
y=0b10000000;
for(i=0;i<4;i++)
{ PORTC=x+y;
delay_ms(50);
x=x<<1;
y=y>>1;
}
}
if(PINA.1==0)
{


x1=0b00001000;

y1=0b00010000;
for(j=0;j<4;j++)
{
x=x1;
y=y1;
for(i=4-j;i>0;i--)
{ PORTC=x+y;
delay_ms(100);
x=(x>>1);
y=(y<<1);
}
x1=(x1>>1)+0b00001000;
y1=(y1<<1)+0b00010000;
}
}
}
}
Câu 7: Thực hiện giao tiếp HMI một nút nhấn và 8 LED, nhấn nút một lần làm
LED sáng dịch chuyển một vị trí.
char maygiat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int i=0;
void main(void)
{
while (1)
{
if(!PINA.0)


{
while(!PINA.0);

PORTC=maygiat[i];
i++;
if(i>8)
{
i=0;
}
}
}
}
Câu 8: Thực hiện HMI nhập dữ liệu 4 chữ số cho một biến x từ bàn phím ma trận,
hiển thị lên 4 LED 7 đoạn.


#include <mega16.h>
#include <delay.h>
#define

HANG1 PORTA.0

#define

HANG2 PORTA.1

#define

HANG3 PORTA.2

#define

HANG4 PORTA.3


#define

COT1

PINA.4

#define

COT2

PINA.5

#define

COT3

PINA.6

#define

COT4

PINA.7

char
led7[10]={0b10111111,0b10000110,0b11011011,0b11001111,0b11100110,0b11101101,0
b11111101,0b10000111,0b111111111,0b11101111};
int key,a,b,z,x,y;
int banphim()

{
PORTA=0xF0;
if(COT1==0)z=0;
if(COT2==0)z=1;
if(COT3==0)z=2;
if(COT4==0)z=3;
if(COT1==COT2==COT3==COT4==1)
{
key=16;
}
else
{
x=0xFE;
y=-1;


do
{
PORTA=x;
x=x<<1;
y++;
}
while(COT1==COT2==COT3==COT4==1);
key=(y*4)+z;
}
return key;
}
void hienthi(unsigned char x)
{
a=x%10;

b=x/10;
PORTC=led7[b];
PORTD=led7[a];
}
void main(void)
{
{
DDRA=0x00;
DDRC=0Xff;
DDRD=0Xff;
}
while (1)
{
banphim();


hienthi(key);
}
}
Câu 9: Thực hiện HMI nhập dữ liệu 4 chữ số cho một biến x từ bàn phím ma trận,
hiển thị lên LCD16x2.

#include <mega16.h>
#include <delay.h>
#include <alcd.h>
#define hang0 PORTA.0
#define hang1 PORTA.1
#define hang2 PORTA.2
#define hang3 PORTA.3
#define cot0 PINA.4

#define cot1 PINA.5


#define cot2 PINA.6
#define cot3 PINA.7
int key,x,y,z,a,b,so,so1,so2;
int banphim()
{
PORTA=0xF0;
if(cot0==cot1==cot2==cot3==1)
{
key=16;
}
else
{
x=0xFE;
y=-1;
do
{
PORTA=x;
y=y+1;
x=x<<1;
}
while(cot0==cot1==cot2==cot3==1);
if(cot0==0&cot1==cot2==cot3==1) z=0;
if(cot1==0&cot0==cot2==cot3==1) z=1;
if(cot2==0&cot0==cot1==cot3==1) z=2;
if(cot3==0&cot0==cot1==cot2==1) z=3;
key=(y*4)+z;
return key;

}


}
void hienthi(unsigned char so)
{
lcd_gotoxy(0,0);
lcd_puts("Phim duoc nhan:");
lcd_gotoxy(0,1);
if(so<10)
{
lcd_putchar('0');
lcd_putchar(so+48);
}
else
{
so1=so/10;
so2=so%10;
lcd_putchar(so1+48);
lcd_putchar(so2+48);
}
}
void main(void)
{
{
DDRA=0x00;
DDRC=0Xff;
lcd_init(16);
}
while (1)

{


banphim();
hienthi(banphim());
}
}
Câu 10: Thực hiện HMI nhập dữ liệu 4 chữ số cho một biến x từ các phím “tăng”,
“giảm”, “trái”, “phải”, “enter”, hiển thị lên 4 LED 7 đoạn.

#include <mega16.h>
#include <delay.h>
#define

UP

PINA.0

#define

DOWN

#define

LEFT

#define

RIGHT


PINA.3

#define

ENTER

PINA.4

#define

SETTING

PINA.1
PINA.2

PINA.5

unsigned char led7[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE4,0xFE,0xF6};
unsigned char quetled[4]={0b00001110,0b00001101,0b00001011,0b00000111};
unsigned char abcd[4];
int i,a,b,c,d;


void hienthi()
{
abcd[0]=a;
abcd[1]=b;
abcd[2]=c;
abcd[3]=d;
for(i=0;i<4;i++)

{
PORTD=quetled[i];
PORTC=led7[abcd[i]];
delay_ms(5);
PORTD=0xFF;
}
}
void nutbam()
{
if(!RIGHT)
{
i++;
if(i>3)
{
i=0;
}
while(!RIGHT);
}
if(!LEFT)
{
i--;


if(i<0)
{
i=3;
}
while(!LEFT);
}
if(!UP)

{
if(i==0)
{
a++;
if(a>9)
{
a=0;
}
}
if(i==1)
{
b++;
if(b>9)
{
b=0;
}
}
if(i==2)
{
c++;
if(c>9)


{
c=0;
}
}
if(i==3)
{
d++;

if(d>9)
{
d=0;
}
}
while(!UP);
}
if(!DOWN)
{
if(i==0)
{
a--;
if(a<0)
{
a=9;
}
}
if(i==1)
{
b--;
if(b<0)


{
b=9;
}
}
if(i==2)
{
c--;

if(c<0)
{
c=9;
}
}
if(i==3)
{
d--;
if(d<0)
{
d=9;
}
}
}
while(!DOWN);
}
void main(void)
{
{
DDRA=0x00;
DDRC=0xFF;


DDRD=0XFF;
}
while (1)
{
if(!SETTING)
{
nutbam();

PORTD=quetled[i];
if(i==0)
{
PORTC=led7[a];
}
if(i==1)
{
PORTC=led7[b];
}
if(i==2)
{
PORTC=led7[c];
}
if(i==3)
{
PORTC=led7[d];
}
}
if(!ENTER)
{
hienthi();


}
}
}
Câu 11: Thực hiện kết nối phần cứng viết chương trình nhận dữ liệu từ 8 nút nhấn nối vào
cổng A của Atmega16-1 truyền qua USART hiện số từ 1 đến 8 lên led 7 đoạn nối vào
Atmega16-2.


#include <mega16.h>
#include <stdio.h>
void main(void)
{
{
DDRA=0x00;
PORTA=0xFF;
}
while (1)
{
switch(PINA)
{
case(0b11111110):


{
putchar(1);
}
break;
case(0b11111101):
{
putchar(2);
}
break;
case(0b11111011):
{
putchar(3);
}
break;
case(0b11110111):

{
putchar(4);
}
break;
case(0b11101111):
{
putchar(5);
}
break;
case(0b11011111):
{
putchar(6);


}
break;
case(0b10111111):
{
putchar(7);
}
break;
case(0b01111111):
{
putchar(8);
}
break;
}
}
}
Lệnh Nhận

#include <mega16.h>
unsigned char led7[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x27, 0x7F};
#include <stdio.h>
void main(void)
{
{
DDRC=0XFF;
}

while (1)
{


switch(getchar())
{
case(1):
{
PORTC=led7[1];
}
break;
case(2):
{
PORTC=led7[2];
}
break;
case(3):
{
PORTC=led7[3];
}
break;

case(4):
{
PORTC=led7[4];
}
break;
case(5):
{
PORTC=led7[5];
}
break;
case(6):


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×