CODE THAY NHAN
-
Upload
independent -
Category
Documents
-
view
5 -
download
0
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