1. Trang chủ
  2. » Giáo Dục - Đào Tạo

bài tập lập trình c

19 196 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 90,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nút nhấn bt2 led PORTX.1 sáng.. Nút nhấn bt3 led PORTX.2 sáng.. Nút nhấn bt4 led PORTX.3 sáng... Dùng 2 nút nhấn ĐK ngắt ngoài.

Trang 1

Bài 1a : Chớp tắt LED dùng for nhấp nháy 3 lần.

#include <mega8.h>

#include <delay.h>

#define data PORTB

unsigned int i,;

#define ADC_VREF_TYPE 0x00

unsigned int read_adc(unsigned char adc_input)

{

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

delay_us(10);

ADCSRA|=0x40;

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

void tatled()

{

data=0x00;

}

void main(void)

{

PORTB=0x00;

DDRB=0xff;

PORTC=0x00;

DDRC=0x00;

PORTD=0x00;

DDRD=0x00;

TCCR0=0x00;

TCNT0=0x00;

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

Trang 2

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

MCUCR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;

SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83;

SPCR=0x00;

TWCR=0x00;

while (1)

{

// Place your code here

tatled();

for(i=0;i<6;i++)

{

data=~data;

delay_ms(50);

}

}

Trang 3

Bài 1b : đếm nhị phân từ 0 -> 255.

#include <mega8.h>

#include <delay.h>

#define data PORTB

unsigned int i,;

#define ADC_VREF_TYPE 0x00

unsigned int read_adc(unsigned char adc_input) {

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); delay_us(10);

ADCSRA|=0x40;

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

void tatled()

{

data=0x00;

}

void main(void)

{

PORTB=0x00;

DDRB=0xff;

PORTC=0x00;

DDRC=0x00;

PORTD=0x00;

DDRD=0x00;

TCCR0=0x00;

TCNT0=0x00;

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

Trang 4

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

MCUCR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;

SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83;

SPCR=0x00;

TWCR=0x00;

while (1)

{

tatled();

for(i=0;i<256;i++)

{

data=i;

delay_ms(50);

}

}

Trang 5

Bài 1c : Dùng 2 nút nhấn:

Nút nhấn bt1 chạy led từ PORTX.0 -> PORTX.7 lưu lại Nút nhấn bt2 tắt led từ PORTX.7 -> PORTX.0

#include <mega8.h>

#include <delay.h>

#define data PORTB

#define bt1 PIND.0

#define bt2 PIND.1

unsigned int i, k;

#define ADC_VREF_TYPE 0x00

unsigned int read_adc(unsigned char adc_input)

{

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

delay_us(10);

ADCSRA|=0x40;

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

void tatled()

{

data=0x00;

}

void main(void)

{

PORTB=0x00;

DDRB=0xff;

PORTC=0x0f;

DDRC=0x0f;

PORTD=0x0f;

DDRD=0x0f;

TCCR0=0x00;

TCNT0=0x00;

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

Trang 6

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

MCUCR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;

SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83;

SPCR=0x00;

TWCR=0x00;

while (1)

{

for(k=0;k<16;k++)

{

if(bt1==0)

{

for(i=0;i<8;i++)

{

data=(data<<1)|0x01; delay_ms(100);

}

}

if(bt2==0)

{

for(i=0;i<8;i++)

{

data=(data>>1); delay_ms(100);

}

Trang 7

}

}

Bài 1d : Dùng 1 nút nhấn

Bật nút 8 đèn sáng của PORTX Thả nút 8 đèn tắt của PORTX

#include <mega8.h>

#include <delay.h>

#define data PORTB

#define bt1 PIND.0

#define ADC_VREF_TYPE 0x00

unsigned int read_adc(unsigned char adc_input) {

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); delay_us(10);

ADCSRA|=0x40;

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

void main(void)

{

PORTB=0x00;

DDRB=0xff;

PORTC=0x00;

DDRC=0x00;

PORTD=0x0f;

DDRD=0x0f;

TCCR0=0x00;

TCNT0=0x00;

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

Trang 8

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

MCUCR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;

SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83;

SPCR=0x00;

TWCR=0x00;

while (1)

{

if(bt1==0)

{

data=0xff;

delay_ms(30);

}

if(bt1==1)

{

data=0x00;

delay_ms(30);

}

}

Trang 9

Bài 1e : Dùng 4 nút nhấn

Nút nhấn bt1 led PORTX.0 sáng Nút nhấn bt2 led PORTX.1 sáng Nút nhấn bt3 led PORTX.2 sáng Nút nhấn bt4 led PORTX.3 sáng.

#include <mega8.h>

#include <delay.h>

#define data PORTB

#define bt1 PIND.0

#define bt2 PIND.1

#define bt3 PIND.2

#define bt4 PIND.3

#define ADC_VREF_TYPE 0x00

unsigned int read_adc(unsigned char adc_input) {

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); delay_us(10);

ADCSRA|=0x40;

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

void tatled()

{

data=0x00;

}

void main(void)

{

PORTB=0x00;

DDRB=0xff;

PORTC=0x00;

DDRC=0x00;

PORTD=0x0f;

DDRD=0x0f;

TCCR0=0x00;

TCNT0=0x00;

TCCR1A=0x00;

Trang 10

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

MCUCR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;

SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83;

SPCR=0x00;

TWCR=0x00;

while (1)

{

if(bt1==0)

{

data=0x01;

delay_ms(50);

}

if(bt2==0)

{

data=0x02;

delay_ms(50);

}

if(bt3==0)

Trang 11

data=0x04;

delay_ms(50);

}

if(bt4==0)

{

data=0x08;

delay_ms(50);

}

}

}

Bài 1f : Chạy 8 led từ PORTX.0 -> PORTX.7… không lưu led.

#include <mega8.h>

#include <delay.h>

#define data PORTB

#define ADC_VREF_TYPE 0x00

unsigned int read_adc(unsigned char adc_input)

{

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

delay_us(10);

ADCSRA|=0x40;

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

void main(void)

{

PORTB=0x00;

DDRB=0xff;

PORTC=0x00;

DDRC=0x00;

PORTD=0x00;

DDRD=0x00;

TCCR0=0x00;

TCNT0=0x00;

TCCR1A=0x00;

TCCR1B=0x00;

Trang 12

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

MCUCR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;

SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83;

SPCR=0x00;

TWCR=0x00;

while (1)

{

data=0x01;

delay_ms(100);

data=0x02;

delay_ms(100);

data=0x04;

delay_ms(100);

data=0x08;

delay_ms(100);

data=0x10;

delay_ms(100);

data=0x20;

delay_ms(100);

Trang 13

delay_ms(100);

data=0x80;

delay_ms(100);

}

}

Bài 1g : Dùng 2 nút nhấn.

Nút nhấn bt1 chạy 8 led từ PORTX.0 -> PORTX.7… không lưu led Nút nhấn bt2 chạy 8 led từ PORTX.7 -> PORTX.0… không lưu led

#include <mega8.h>

#include <delay.h>

#define data PORTB

#define bt1 PIND.0

#define bt2 PIND.1

#define ADC_VREF_TYPE 0x00

unsigned int read_adc(unsigned char adc_input)

{

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

delay_us(10);

ADCSRA|=0x40;

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

void tatled()

{

data=0x00;

}

void main(void)

{

PORTB=0x00;

DDRB=0xff;

PORTC=0x00;

DDRC=0x00;

PORTD=0x0f;

DDRD=0x0f;

Trang 14

TCNT0=0x00;

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

MCUCR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;

SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83;

SPCR=0x00;

TWCR=0x00;

while (1)

{

tatled();

if(bt1==0)

{

data=0x01;

delay_ms(100);

data=0x02;

delay_ms(100);

Trang 15

delay_ms(100); data=0x08; delay_ms(100); data=0x10; delay_ms(100); data=0x20; delay_ms(100); data=0x40; delay_ms(100); data=0x80; delay_ms(100); }

tatled();

if(bt2==0) {

data=0x80; delay_ms(100); data=0x40; delay_ms(100); data=0x20; delay_ms(100); data=0x10; delay_ms(100); data=0x08; delay_ms(100); data=0x04; delay_ms(100); data=0x02; delay_ms(100); data=0x01; delay_ms(100); }

}

}

Trang 16

Bài 2 Dùng 2 nút nhấn ĐK ngắt ngoài.

1 nút nhấn bt1 đếm lên từ số 0 -> 9 (led 7 đoạn)

1 nút nhấn bt2 đếm xuống từ số 9 -> 0.

#include <mega8.h>

#include <delay.h>

#define bt1 PIND.2

#define bt2 PIND.3

unsigned char dem;

interrupt [EXT_INT0] void ext_int0_isr(void)

{

dem++;

}

interrupt [EXT_INT1] void ext_int1_isr(void)

{

dem ;

}

#define ADC_VREF_TYPE 0x00

unsigned int read_adc(unsigned char adc_input)

{

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

delay_us(10);

ADCSRA|=0x40;

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

void main(void)

{

PORTB=0x00;

DDRB=0xff;

PORTC=0x00;

DDRC=0x00;

PORTD=0x0f;

Trang 17

TCNT0=0x00;

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

GICR|=0xC0;

MCUCR=0x0B;

GIFR=0xC0;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;

SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x84;

SPCR=0x00;

TWCR=0x00;

#asm("sei")

while (1)

{

bt1=dem;

if(dem>9) dem=0;

PORTB=dem;

bt2=dem;

if(dem<0) dem=9;

PORTB=dem;

}

}

Trang 18

Bài 3 : Viết chương trình hiển thị lần lượt các số từ 0 đến 9 lên LED 7 đoạn

#include <mega8.h>

#include <delay.h>

unsigned char i;

unsigned char so[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

#define ADC_VREF_TYPE 0x00

unsigned int read_adc(unsigned char adc_input)

{

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

delay_us(10);

ADCSRA|=0x40;

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

void main(void)

{

PORTB=0x00;

DDRB=0xff;

PORTC=0x00;

DDRC=0x00;

PORTD=0x00;

DDRD=0x00;

TCCR0=0x00;

TCNT0=0x00;

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

Trang 19

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

MCUCR=0x00;

TIMSK=0x00;

UCSRB=0x00;

ACSR=0x80;

SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x84;

SPCR=0x00;

TWCR=0x00;

while (1)

{

for(i=0;i<10;i++)

{

PORTB=so[i];

delay_ms(100);

}

}

}

Ngày đăng: 29/08/2017, 08:50

TỪ KHÓA LIÊN QUAN

w