CODE THAY NHAN

48
// CÒN MẤY CÁI DDRX TỪ COI GHI NHA CÁI PORT NÀO RA THÌ DDRX=0XFF CÒN VÔ HAY KO SỬ DỤNG THÌ 0X00 TẤT CẢ CÁC BÀI LUÔN P B0/T0/XC K 1 P B1/T1 2 PB2/AIN 0/IN T2 3 PB3/AIN 1/O C0 4 P B4/SS 5 PB5/M O SI 6 PB6/M ISO 7 P B7/SCK 8 RESET 9 XTAL2 13 XTAL1 12 PD 0/RXD 14 P D 1/TXD 15 PD 2/IN T0 16 PD 3/IN T1 17 PD 4/O C1B 18 PD 5/O C1A 19 PD 6/IC P1 20 PD 7/O C2 21 P C 0/SCL 22 PC 1/SDA 23 P C 2/TCK 24 PC3/TM S 25 PC 4/TD O 26 PC 5/TD I 27 P C 6/TO SC 1 28 P C 7/TO SC 2 29 PA7/ADC7 33 PA6/ADC6 34 PA5/ADC5 35 PA4/ADC4 36 PA3/ADC3 37 PA2/ADC2 38 PA1/ADC1 39 PA0/ADC0 40 AREF 32 AVCC 30 U1 ATMEGA32 D1 LED -G R EEN D2 LED -G R EEN D3 LED -G R EEN D4 LED -G R EEN R1 330R R2 330R R3 330R R4 330R 1.1. Cho sáng tất cả 4 Led 1.2. Sáng Led D1 và D3 1.3. Các led sáng tắt theo thứ tự từ trên xuống 1.4. Các led sáng tắt theo thứ tự từ dưới lên #include <mega32.h> #include <delay.h> void main(void) { int i,j; unsigned char a[4]={0x01,0x02,0x04,0x08}; while (1) { //sang tat ca 4 led

Transcript of CODE THAY NHAN

// CÒN MẤY CÁI DDRX TỪ COI GHI NHA CÁI PORT NÀO RA THÌ DDRX=0XFF CÒN VÔ HAY KO SỬ DỤNG THÌ 0X00 TẤT CẢ CÁC BÀI LUÔN

PB0/T0/XCK1PB1/T12PB2/AIN0/INT23PB3/AIN1/OC04PB4/SS5PB5/M OSI6PB6/M ISO7PB7/SCK8

RESET9

XTAL213 XTAL112

PD0/RXD 14PD1/TXD 15PD2/INT0 16PD3/INT1 17PD4/OC1B 18PD5/OC1A 19PD6/ICP1 20PD7/OC2 21

PC0/SCL 22PC1/SDA 23PC2/TCK 24PC3/TM S 25PC4/TDO 26PC5/TDI 27

PC6/TOSC1 28PC7/TOSC2 29

PA7/ADC733 PA6/ADC634 PA5/ADC535 PA4/ADC436 PA3/ADC337 PA2/ADC238 PA1/ADC139 PA0/ADC040

AREF 32AVCC 30

U1

ATM EGA32

D1

LED-GREEN

D2

LED-GREEN

D3

LED-GREEND4

LED-GREEN

R1330R

R2330R

R3330R

R4330R

1.1.Cho sáng tất cả 4 Led 1.2.Sáng Led D1 và D31.3.Các led sáng tắt theo thứ tự từ trên xuống1.4.Các led sáng tắt theo thứ tự từ dưới lên

#include <mega32.h>

#include <delay.h>

void main(void)

{

int i,j;

unsigned char a[4]={0x01,0x02,0x04,0x08};

while (1)

{

//sang tat ca 4 led

PORTC=0x0F;

delay_ms (100);

//sang led 1 va led 3

PORTC=0x05;

delay_ms (100);

//sang led 3

//sang tu tren xuong

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

{

PORTC=a[i];

delay_ms (100);

}

//sang tu duoi len

for (j=3;j>=0;j--)

{

PORTC=a[j];

delay_ms (100);

}

}

}

ĐẾM NHỊ PHÂN 8 BIT (ĐẾM TỪ 0 (8 ĐÈN ĐỀU TẮT) ĐẾN 255 (8 ĐÈN ĐỀU SÁNG)

#include <mega32.h>

#include <delay.h>

void main(void)

{

int i,j;

unsigned char a[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};

unsigned char b[16]={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0xA0,0xB0,0xC0,0xD0,0xE0,0xF0};

while (1)

{

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

{

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

{

PORTC=b[i]+a[j];

delay_ms (50);

}

}

}

}

PB0/ICP14PB1/OC1A15PB2/SS/OC1B16PB3/M OSI/OC217PB4/M ISO18PB5/SCK19

PC0/ADC023PC1/ADC124PC2/ADC225PC3/ADC326PC4/ADC4/SDA27PC5/ADC5/SCL28PC6/RESET1

PB6/XTAL1/TOSC19PB7/XTAL2/TOSC210

PD0/RXD 2PD1/TXD 3PD2/INT0 4PD3/INT1 5

PD4/XCK/T0 6PD5/T1 11

PD6/AIN0 12PD7/AIN1 13

AVCC 20AREF 21

U1

ATM EGA8

D1

LED-GREEN

D2

LED-GREEN

D3

LED-GREEN

D4

LED-GREEN

R1330R

R2330R

R3330R

R4330R

NHẤN BUTTON 1 SÁNG TRÊN XUỐNG ,NHẤN BUTTON 2 SÁNG TỪ DƯỚI LÊN

#include <mega32.h>

#include <delay.h>

// Declare your global variables here

void main(void)

{

int i,j;

unsigned char a[4]={0x01,0x02,0x04,0x08};

while (1)

{

if (PIND.0==1)

{

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

{

PORTB=a[i];

delay_ms (50);

}

}

PIND.0=0;PIND.1=0;

if (PIND.1==1)

{

for (j=3;j>=0;j--)

{

PORTB=a[j];

delay_ms (50);

}

}

}

}

OFFON

12345678

161514131211109

DSW 1

DIPSW _8

PB0/ICP14PB1/OC1A15PB2/SS/OC1B16PB3/M OSI/OC217PB4/M ISO18PB5/SCK19

PC0/ADC023PC1/ADC124PC2/ADC225PC3/ADC326PC4/ADC4/SDA27PC5/ADC5/SCL28PC6/RESET1

PB6/XTAL1/TOSC19PB7/XTAL2/TOSC210

PD0/RXD 2PD1/TXD 3PD2/INT0 4PD3/INT1 5

PD4/XCK/T0 6PD5/T1 11

PD6/AIN0 12PD7/AIN1 13

AVCC 20AREF 21

U1

ATM EGA8

R14k7

R24k7

R34k7

R44k7 R5

4k7

R64k7

R74k7

R84k7

R9330RR10330RR11330RR12330RR13330RR14330RR15330R

R161k

Q12N2905

DÙNG CÔNG TẮC ĐIỀU KHIỂN LED 7 ĐOẠN ĐẾM 0->F

#include <mega32.h>

void main(void)

{

while (1)

{

switch (PINB)

{

case 0:{PORTD=0xC0;break;}//so 0

case 1:{PORTD=0xF9;break;}//so 1

case 2:{PORTD=0xA4;break;}//so 2

case 3:{PORTD=0xB0;break;}//so 3

case 4:{PORTD=0x99;break;}//so 4

case 5:{PORTD=0x92;break;}//so 5

case 6:{PORTD=0x82;break;}//so 6

case 7:{PORTD=0xF8;break;}//so 7

case 8:{PORTD=0x80;break;}//so 8

case 9:{PORTD=0x90;break;}//so 9

case 10:{PORTD=0x88;break;}//so A

case 11:{PORTD=0x83;break;}//so B

case 12:{PORTD=0xC6;break;}//so C

case 13:{PORTD=0xA1;break;}//so D

case 14:{PORTD=0x86;break;}//so E

case 15:{PORTD=0x8E;break;}//so F

}

}

}

PB0/ICP14PB1/OC1A15PB2/SS/OC1B16PB3/M OSI/OC217PB4/M ISO18PB5/SCK19

PC0/ADC023PC1/ADC124PC2/ADC225PC3/ADC326PC4/ADC4/SDA27PC5/ADC5/SCL28PC6/RESET1

PB6/XTAL1/TOSC19PB7/XTAL2/TOSC210

PD0/RXD 2PD1/TXD 3PD2/INT0 4PD3/INT1 5

PD4/XCK/T0 6PD5/T1 11

PD6/AIN0 12PD7/AIN1 13

AVCC 20AREF 21

U1

ATM EGA8

Q12N3702

R11k

Q22N3702

R21k

R3330R

R4330R

R5330R

R6330R

R7330R

R8330R

R9330R

ĐẾM TỪ 0->99 ( LÀM THEO CỦA ANH PHÚC DÙNG THEM IC THÌ DỄ HƠN) LÀM CÁI NÀY NÓ CHỚP CHỚP

#include <mega32.h>

#include <delay.h>

void main(void)

{

int i,j;

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

while (1)

{

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

{

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

{

PORTB.0=0;

PORTB.1=1;

PORTA=a[i];

delay_ms (50);

PORTB.0=1;

PORTB.1=0;

PORTA=a[j];

delay_ms (50);

}

}

}

}

PE0/RXD0/PDI 2PE1/TXD0/PDO 3PE2/XCK0/AIN0 4PE3/OC3A/AIN1 5PE4/OC3B/INT4 6PE5/OC3C/INT5 7

PE6/T3/INT6 8PE7/ICP3/INT7 9

PB0/SS10PB1/SCK11PB2/M OSI12PB3/M ISO13PB4/OC014PB5/OC1A15PB6/OC1B16PB7/OC2/OC1C17

PG3/TOSC2 18PG4/TOSC1 19

RESET20

XTAL223 XTAL124PD0/SCL/INT0 25PD1/SDA/INT1 26PD2/RXD1/INT2 27PD3/TXD1/INT3 28

PD4/ICP1 29PD5/XCK1 30

PD6/T1 31PD7/T2 32

PG0/W R 33PG1/RD 34

PC0/A835PC1/A936PC2/A1037PC3/A1138PC4/A1239PC5/A1340PC6/A1441PC7/A1542 PG2/ALE 43

PA7/AD744 PA6/AD645 PA5/AD546 PA4/AD447 PA3/AD348 PA2/AD249 PA1/AD150 PA0/AD051

PF7/ADC7/TDI 54PF6/ADC6/TDO 55PF5/ADC5/TM S 56PF4/ADC4/TCK 57PF3/ADC3 58PF2/ADC2 59PF1/ADC1 60PF0/ADC0 61

AREF62AVCC64 PEN 1

U1

ATM EGA128

D714

D613

D512

D411

D310

D29

D18

D07

E6

RW5

RS4

VSS

1VD

D2

VEE

3

LCD1LM 016L

R1330R

X1CRYSTAL

C1

22p

C2

22p

a)Hiển thị chuỗi số 0123456789 ở dòng 1 vàabcdefghijk ở dòng 2.

b)Hiển thị chuỗi ký tự “Vi Dieu Khien ”

c)Điều khiển chuỗi ở câu b) dịch chuyển từ phải sangtrái và ngược lại.

d)Xuất từng ký tự trong chuỗi "Vi dieu khien " ra LCDtheo thứ tự từ trái sang phải.

CÂU A

#include <mega32.h>

#include <delay.h>

#include <lcd.h>

#asm

.equ __lcd_port=0x15;

#endasm

void main(void)

{

lcd_init(16);

while (1)

{

lcd_gotoxy (0,0);

lcd_putsf ("0123456789");

lcd_gotoxy (0,1);

lcd_putsf ("abcdefghijk");

delay_ms (100);

}

}

CÂU B

#include <mega32.h>

#include <delay.h>

#include <alcd.h>

#asm

.equ __lcd_port=0x15;

#endasm

void main(void)

{

while (1)

{

lcd_gotoxy (0,0);

lcd_putsf ("Vi Dieu Khien"); //(THÍCH HIỂN THỊ CHỮ GÌ THÌ ĐÁNH CHỮ ĐÓ VÀO DẤU “ ”

delay_ms (100);

}

}

CÂU C //CÁI NÀY CHỈ DỊCH TỪ TRÁI SANG PHẢI CÒN TỪ PHẢI SANG TRÁI THÌ TƯƠNG TỰ VẬY

#include <mega32.h>

#asm

.equ __lcd_port=0x15 //khai báo port dùng LCD ? dây là portC, n?u portD, B là 12, 18

#endasm

// Alphanumeric LCD Module functions

#include <lcd.h>

#include <delay.h>

// Declare your global variables here

void main(void)

{

char flash*str ="vi dieu khien";

char flash*str2=" ";

int i=16;

lcd_init(16);

while (1)

{

i--;

lcd_gotoxy (i,0);

lcd_putsf(" Vi Dieu Khien ");

lcd_gotoxy (0,1);

lcd_putsf (" ");

delay_ms (100);

if (i==0)

{

i=16;

lcd_gotoxy(0,0);

lcd_putsf (" ");

}

}

}

CÂU D

#include <mega32.h>

#include <delay.h>

#include <lcd.h>

#asm

.equ __lcd_port=0x15;PORTC

#endasm

char flash*str1 = " Vi Dieu Khien ";

void main(void)

{

int i;

lcd_init(16);

while (1)

{

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

{

lcd_gotoxy (i,0);

lcd_putchar (str2[i]);

delay_ms (50);

}

};

}

12345678

161514131211109

RN1

300X8

PA0/ADC040PA1/ADC139PA2/ADC238PA3/ADC337PA4/ADC436PA5/ADC535PA6/ADC634

PB0/XCK/T01PB1/T12PB2/INT2/AIN03PB3/OC0/AIN14PB4/SS5PB5/M OSI6PB6/M ISO7PB7/SCK8

PA7/ADC733

RESET9

XTAL113XTAL212

PC0/SCL 22PC1/SDA 23PC2/TCK 24PC3/TM S 25PC4/TDO 26PC5/TDI 27

PC6/TOSC1 28PC7/TOSC2 29

PD0/RXD 14PD1/TXD 15PD2/INT0 16PD3/INT1 17PD4/OC1B 18PD5/OC1A 19PD6/ICP 20PD7/OC2 21

AVCC 30AREF 32

U1

ATM EGA32

#include <mega32.h>

#include <delay.h>

void main(void)

{

int i,j, line;

unsigned char a[20]={0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0xB7,0xB7,0xB7,0xC0,0xFF,0x80,0xB6,0xB6,0xB6,0xC1,0xFF,0xFF,0xFF,0xFF,}; // CÁI MẢNG NÀY HOK GIỐNG NHƯCỦA THẦY NHƯNG MÀ CHẠY THÌ GIỐNG

while (1)

{

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

{

line=1;

for (j=i;j<(i+5);j++)

{

PORTC=line;

PORTD=a[j];

line<<=1;

delay_ms (30);

}

}

}

}

PHẦN NGẮT NGOÀI

2.1.Khi nhấn nút button 1 (tương ứng kết nối với INT1)thì mạch đếm lên số thập phân hiển thị trên led 7đoạn

2.2.Khi nhấn nút button 2 (tương ứng kết nối với INT2)thì mạch đếm lên số thập phân hiển thị trên led 7đoạn

2.3.Khi nhấn nút button 3 (tương ứng kết nối với INT0)thì mạch đưa về 0

PB0/SS 10PB1/SCK 11PB2/M OSI 12PB3/M ISO 13PB4/OC0 14

PB5/OC1A 15PB6/OC1B 16

PB7/OC2/OC1C 17

AREF62 AVCC64

AGND63

XTAL124XTAL223

RESET20

PG4/TOSC1 19PG3/TOSC2 18

PEN1PG2/ALE 43PG0/W R 33PG1/RD 34

AD[0..7]A[8..15]

PD0/SCL/INT025PD1/SDA/INT126PD2/RXD1/INT227PD3/TXD1/INT328PD4/IC129PD5/XCK130PD6/T131PD7/T232

PE1/PDO/TXD0 3PE2/XCK0/AIN0 4PE3/OC3A/AIN1 5PE4/OC3B/INT4 6PE5/OC3C/INT5 7

PE6/T3/INT6 8

PE0/PDI/RXD0 2

PE7/IC3/INT7 9

PF0/ADC061PF1/ADC160PF2/ADC259PF3/ADC358PF4/ADC4/TCK57PF5/ADC5/TM S56PF6/ADC6/TDO55PF7/ADC7/TDI54

U1

ATM EGA128

R14k7

R24k7

R3330RR4330RR5330RR6330RR7330RR10330RR8330R

Q12N2907

R91k

R114k7

#include <mega128.h>

#include <delay.h>

int i;

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

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{

PORTE.6=1; //LED 7 DOAN HIỂN THỊ SỐ 0

}

// External Interrupt 1 service routine

interrupt [EXT_INT1] void ext_int1_isr(void)

{

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

{

PORTE=a[i];

delay_ms (50);

}

}

// External Interrupt 2 service routine

interrupt [EXT_INT2] void ext_int2_isr(void)

{

for (i=9;i>=0;i--)

{

PORTE=a[i];

delay_ms (50);

}

}

void main(void)

{

// KHÔNG BIẾT HÔM BỮA THẦY NÓI THANH GHI DỊCH GÌ ĐÓ KO BIẾT PHẢI GHI CÁI NÀY HOK TỰ TÌM HIỂU NHA

// CON NÀY LÀ ATMEGA128 NÊN CÓ NHIỀU CÁI NGẮT

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Low level

// INT1: On

// INT1 Mode: Low level

// INT2: On

// INT2 Mode: Low level

// INT3: Off

// INT4: Off

// INT5: Off

// INT6: Off

// INT7: Off

EICRA=0x00;

EICRB=0x00;

EIMSK=0x07;

EIFR=0x07;

#asm("sei")

while (1)

{

// Place your code here

}

}

ĐẾM NHỊ PHÂN 4 BIT ẤN BUTTON 1 ĐẾM LÊN, BUTTON 2 ĐẾM XUỐNG

// CÁI NÀY DO LÚC MẮC LED NHƯ HÌNH NÊN CÁI MẢNG LÀM VẬY CHO DỄ

#include <mega32.h>

#include <delay.h>

unsigned char a[]={0x0F,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};

int i;

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{

// ĐẾM LÊN

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

{

PORTC=a[i];

delay_ms (50);

}

}

// External Interrupt 1 service routine

interrupt [EXT_INT1] void ext_int1_isr(void)

{

// ĐẾM XUỐNG

for (i=15;i>=0;i--)

{

PORTC=a[i];

delay_ms (50);

}

}

void main(void)

{

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Low level

// INT1: On

// INT1 Mode: Low level

// INT2: Off

GICR|=0xC0;

MCUCR=0x00;

MCUCSR=0x00;

GIFR=0xC0;

#asm("sei")

while (1)

{

PORTC=0x0F;

}

}

UART

#include <mega32.h>

#include <delay.h>

#include <stdio.h>

void main(void)

{

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud Rate: 9600

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x19;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

while (1)

{

printf ("Vat Li Dien Tu\n\r");

delay_ms (500);

}

}

// bài này viết 2 con nha 2 con viet giong nhau het

#include <mega32.h>

#include <delay.h>

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

void main(void)

{

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud Rate: 9600

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x19;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

while (1)

{

unsigned char data;

data=getchar();

putchar(data);

}

}

CODE VISUABASIC

Dim dulieu As String

Private Sub Command1_Click(Index As Integer)

End Sub

Private Sub exit_Click()

End ‘thoát chương trình

End Sub

Private Sub Form_Load()

MSComm1.CommPort = 1 ‘chọn com 1

MSComm1.Settings = "9600,n,8,1" ‘cài thông số trong slice thầy có

MSComm1.PortOpen = True

End Sub

Private Sub nhan_Click(Index As Integer)

dulieu = MSComm1.Input ‘ nhận dữ liệu từ com

Text2.Text = dulieu ‘ đưa dữ liệu ra text2

End Sub

Private Sub truyen_Click(Index As Integer) ‘ truyền dữ liêu đi vào com

dulieu = Text1.Text ‘ lấy dữ liệu từ text1

MSComm1.Output = dulieu ‘ đẩy dữ liệu ra com

End Sub

CODE VISION

#include <mega32.h>

#include <stdio.h>

void main(void)

{

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud Rate: 9600

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x67;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

while (1)

{

unsigned char dulieu;

dulieu = getchar ();

putchar (dulieu);

}

}

CODE VISUABASIC

Dim dulieu As String

Private Sub Command1_Click(Index As Integer)

End Sub

Private Sub exit_Click()

End ‘thoát chương trình

End Sub

Private Sub Form_Load()

MSComm1.CommPort = 1 ‘chọn com 1

MSComm1.Settings = "9600,n,8,1" ‘cài thông số trong slice thầy có

MSComm1.PortOpen = True

End Sub

Private Sub nhan_Click(Index As Integer)

dulieu = MSComm1.Input ‘ nhận dữ liệu từ com

Text2.Text = dulieu ‘ đưa dữ liệu ra text2

End Sub

Private Sub truyen_Click(Index As Integer) ‘ truyền dữ liêu đi vào com

dulieu = Text1.Text ‘ lấy dữ liệu từ text1

MSComm1.Output = dulieu ‘ đẩy dữ liệu ra com

End Sub

Code VISION

#include <mega32.h>

#include <stdlib.h>

#include <string.h>

#include <delay.h>

#include <stdio.h>

char str[10],so1[10],so2[10],kq[10],i,n,j,key;

float s1,s2,kytu;

#ifndef RXB8

#define RXB8 1

#endif

#ifndef TXB8

#define TXB8 0

#endif

#ifndef UPE

#define UPE 2

#endif

#ifndef DOR

#define DOR 3

#endif

#ifndef FE

#define FE 4

#endif

#ifndef UDRE

#define UDRE 5

#endif

#ifndef RXC

#define RXC 7

#endif

#define FRAMING_ERROR (1<<FE)

#define PARITY_ERROR (1<<UPE)

#define DATA_OVERRUN (1<<DOR)

#define DATA_REGISTER_EMPTY (1<<UDRE)

#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer

#define RX_BUFFER_SIZE 8

char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE <= 256

unsigned char rx_wr_index,rx_rd_index,rx_counter;

#else

unsigned int rx_wr_index,rx_rd_index,rx_counter;

#endif

// This flag is set on USART Receiver buffer overflow

bit rx_buffer_overflow;

char getchar(void)

{

char data;

while (rx_counter==0);

data=rx_buffer[rx_rd_index++];

#if RX_BUFFER_SIZE != 256

if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;

#endif

#asm("cli")

--rx_counter;

#asm("sei")

return data;

}

// USART Receiver interrupt service routine

interrupt [USART_RXC] void usart_rx_isr(void)

{

char status,data;

status=UCSRA;

data=UDR;

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)

{

rx_buffer[rx_wr_index++]=data;

#if RX_BUFFER_SIZE == 256

// special case for receiver buffer size=256

if (++rx_counter == 0)

{

#else

if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;

if (++rx_counter == RX_BUFFER_SIZE)

{

rx_counter=0;

#endif

rx_buffer_overflow=1;

}

}

kytu=getchar();

str[i]=kytu;

i=i+1;

}

#ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART Receiver buffer

#define _ALTERNATE_GETCHAR_

#pragma used+

#pragma used-

#endif

void main(void)

{

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud Rate: 9600

UCSRA=0x00;

UCSRB=0x98;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x19;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

#asm("sei")

while (1)

{

i=strlen(str); //lấy độ dài chuỗi

if(i>0)

{

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

{

if (str[j]=='+' || str[j]=='-' || str[j]=='*' || str[j]=='/' ) //lấy vị trí của dấu (phép toán + - * /)

key=j;

}

for(n=0;n<key;n++)

{

so1[n]=str[n]; //số hạng đầu trước phép toán

}

for(n=key+1;n<i;n++)

{

so2[n]=str[n]; // số hạng sau phép toán

}

s1=atof(so1); //chuyển chuỗi thành số

s2=atof(so2);

if (str[key]=='+')

{

kytu=s1+s2;

}

if (str[key]=='-')

{

kytu=s1-s2;

}

if (str[key]=='*')

{

kytu=s1*s2;

}

if (str[key]=='/')

{

kytu=s1/s2;

}

ftoa(kytu,0,kq); // chuyển số thành chuổi

puts (kq); // đẩy kết wả

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

{

str[i]=0;

kq[i]=0;

so1[i]=0;

so2[i]=0;

}

i=0;

delay_ms(300);

}

}

}

// cái này là code của ku quốc nha hok biết đường giải thích thắc mắc thì hỏi quốc nha

#include <mega32.h>#include <stdlib.h>

#define RXB8 1#define TXB8 0#define UPE 2#define OVR 3#define FE 4#define UDRE 5#define RXC 7

#define FRAMING_ERROR (1<<FE)#define PARITY_ERROR (1<<UPE)#define DATA_OVERRUN (1<<OVR)#define DATA_REGISTER_EMPTY (1<<UDRE)#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer#define RX_BUFFER_SIZE 8char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256unsigned char rx_wr_index,rx_rd_index,rx_counter;#elseunsigned int rx_wr_index,rx_rd_index,rx_counter;#endif

// This flag is set on USART Receiver buffer overflowbit rx_buffer_overflow;

// USART Receiver interrupt service routineinterrupt [USART_RXC] void usart_rx_isr(void){char status,data;status=UCSRA;data=UDR;if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0){rx_buffer[rx_wr_index]=data;if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;if (++rx_counter == RX_BUFFER_SIZE){rx_counter=0;rx_buffer_overflow=1;

};};}

#ifndef _DEBUG_TERMINAL_IO_// Get a character from the USART Receiver buffer#define _ALTERNATE_GETCHAR_#pragma used+char getchar(void){char data;while (rx_counter==0);data=rx_buffer[rx_rd_index];if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;#asm("cli")--rx_counter;#asm("sei")return data;}#pragma used-#endif

// USART Transmitter buffer#define TX_BUFFER_SIZE 8char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE<256unsigned char tx_wr_index,tx_rd_index,tx_counter;#elseunsigned int tx_wr_index,tx_rd_index,tx_counter;#endif

// USART Transmitter interrupt service routineinterrupt [USART_TXC] void usart_tx_isr(void){if (tx_counter){--tx_counter;UDR=tx_buffer[tx_rd_index];if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;};}

#ifndef _DEBUG_TERMINAL_IO_// Write a character to the USART Transmitter buffer#define _ALTERNATE_PUTCHAR_#pragma used+

void putchar(char c){while (tx_counter == TX_BUFFER_SIZE);#asm("cli")if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0)){tx_buffer[tx_wr_index]=c;if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;++tx_counter;}elseUDR=c;#asm("sei")}#pragma used-#endif

// Standard Input/Output functions#include <stdio.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x60

// Read the 8 most significant bits// of the AD conversion resultunsigned char read_adc(unsigned char adc_input){ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);// Delay needed for the stabilization of the ADC input voltagedelay_us(10);// Start the AD conversionADCSRA|=0x40;// Wait for the AD conversion to completewhile ((ADCSRA & 0x10)==0);ADCSRA|=0x10;return ADCH;}

// Declare your global variables hereunsigned char lm35,i,bientro,j;float vin_lm35,t,tb_lm35,vin_bientro,r,tb_bientro;char str_lm35[11],str_bientro[11];void main(void){

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity// USART Receiver: On// USART Transmitter: On// USART Mode: Asynchronous// USART Baud Rate: 9600UCSRA=0x00;UCSRB=0xD8;UCSRC=0x86;UBRRH=0x00;UBRRL=0x19;

// Analog Comparator initialization// Analog Comparator: Off// Analog Comparator Input Capture by Timer/Counter 1: OffACSR=0x80;SFIOR=0x00;

// ADC initialization// ADC Clock frequency: 1000.000 kHz// ADC Voltage Reference: AVCC pin// Only the 8 most significant bits of// the AD conversion result are usedADMUX=ADC_VREF_TYPE & 0xff;ADCSRA=0x82;// Global enable interrupts#asm("sei")

while (1){// Place your code heretb_lm35=0;for(i=0;i<100;i++) //vong lap chong nhieu{lm35=read_adc(1); //doc ngo vao ADC vin_lm35=(float)lm35*5/256; //doc dien ap ngo vaot=vin_lm35*100; //tinh nhiet dotb_lm35+=t;}t=tb_lm35/100;ftoa(t,0,str_lm35); //chuyen nhiet do kieu float sang kieu chuoi printf("%s",str_lm35); //truyen nhiet do len may tinh kieu chuoi//putchar(str);delay_ms(100);// tb_bientro=0;// for(j=0;j<100;j++) //vong lap chong nhieu// {// bientro=read_adc(0); //doc ngo vao ADC 

// vin_bientro=(float)bientro*5; //doc dien ap ngo vao// r=vin_bientro; //tinh nhiet do// tb_bientro+=t;// }bientro = read_adc(0);r=bientro/100;ftoa(r,0,str_bientro); //chuyen nhiet do kieu float sang kieu chuoi printf("%s",str_bientro); //truyen nhiet do len may tinh kieu chuoi//putchar(str);delay_ms(50);};}

CODE ANH PHÚC

// Con atmega1

#include <mega32.h>

#define PORT7SEG PORTC

// Standard Input/Output functions

#include <stdio.h>

void daydulieu(unsigned char x)

{

switch(x)

{

case 0: { PORT7SEG=0xC0; break; } // So 0

case 1: { PORT7SEG=0xF9; break; } // So 1

case 2: { PORT7SEG=0xA4; break; } // So 2

case 3: { PORT7SEG=0xB0; break; } // So 3

case 4: { PORT7SEG=0x99; break; } // So 4

case 5: { PORT7SEG=0x92; break; } // So 5

case 6: { PORT7SEG=0x82; break; } // So 6

case 7: { PORT7SEG=0xF8; break; } // So 7

case 8: { PORT7SEG=0x80; break; } // So 8

case 9: { PORT7SEG=0x90; break; } // So 9

case 10:{ PORT7SEG=0x00; break; } //tat ca cung sang

}

}

void main(void)

{

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud Rate: 19200

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x19;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

while (1)

{

unsigned char tam, tam1;

if (PINA<=9)

tam=PINA;

else

tam=10;

putchar(tam);

tam1=getchar ();

daydulieu (tam1);

}

}

// Con atmega2

#include <mega32.h>

// Standard Input/Output functions

#include <stdio.h>

#define PORT7SEG PORTC

// Declare your global variables here

void daydulieu(unsigned char x)

{

switch(x)

{

case 0: { PORT7SEG=0xC0; break; } // So 0

case 1: { PORT7SEG=0xF9; break; } // So 1

case 2: { PORT7SEG=0xA4; break; } // So 2

case 3: { PORT7SEG=0xB0; break; } // So 3

case 4: { PORT7SEG=0x99; break; } // So 4

case 5: { PORT7SEG=0x92; break; } // So 5

case 6: { PORT7SEG=0x82; break; } // So 6

case 7: { PORT7SEG=0xF8; break; } // So 7

case 8: { PORT7SEG=0x80; break; } // So 8

case 9: { PORT7SEG=0x90; break; } // So 9

case 10:{ PORT7SEG=0x00; break; } //tat ca cung sang

}

}

void main(void)

{

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud Rate: 19200

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x19;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

while (1)

{

unsigned char tam,tam1;

tam=getchar ();

daydulieu (tam);

if (PINA<=9)

tam1=PINA;

else

tam1=10;

putchar(tam1);

}

}

//Tạo 10 xung 1s 2s 3s…. 10s

#include <mega32.h>

int i,count,dem;

// Timer 0 overflow interrupt service routine

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{

// Reinitialize Timer 0 value

TCNT0=0x83;

dem=dem+1;

if ( dem==500)

{

count++;

dem=0;

if (count%2==0)

{

PORTA.0=1;

i++;

}

else

{

PORTA.0=0;

i++;

}

if (i%2==0 && i%4!=0)

PORTA.1=1;

if (i%4==0)

PORTA.1=0;

if (i%3==0 && i%6!=0)

PORTA.2=1;

if (i%6==0)

PORTA.2=0;

if (i%4==0 && i%8!=0)

PORTA.3=1;

if (i%8==0)

PORTA.3=0;

if (i%5==0 && i%10!=0)

PORTA.4=1;

if (i%10==0)

PORTA.4=0;

if (i%6==0 && i%12!=0)

PORTA.5=1;

if (i%12==0)

PORTA.5=0;

if (i%7==0 && i%14!=0)

PORTA.6=1;

if (i%14==0)

PORTA.6=0;

if (i%8==0 && i%16!=0)

PORTA.7=1;

if (i%16==0)

PORTA.7=0;

if (i%9==0 && i%18!=0)

PORTB.0=1;

if (i%18==0)

PORTB.0=0;

if (i%10==0 && i%20!=0)

PORTB.1=1;

if (i%20==0)

PORTB.1=0;

}

}

void main(void)

{

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: 125.000 kHz

// Mode: Normal top=0xFF

// OC0 output: Toggle on compare match

TCCR0=0x12;

TCNT0=0x83;

OCR0=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

#asm("sei")

while (1)

{

};

}