📄 main.c
字号:
/*
实验十三:
AVR单片机I2C总线实验。
1、用24C02记录CPU启动次数,并在PB口上显示出来。
2、内部1 M晶振,程序采用单任务方式,软件延时。
3、进行此实验请插上JP1的所有8个短路块,JP7(LED_EN)/PC0/PC1短路块。
4、通过此实验,可以I2C总线操作有个初步认识。
AVR mega16学习板
www.iccavr.com
14:42 2007-4-9
*/
#include "iom16v.h"
#include "beep.h"
#include "delay.h"
#include "ds1302.h"
#include "spi.h"
#include "twi.h"
#include "uart.h"
void main(void) {
unsigned char temp;
PORTA = 0xFF; /*打开上拉*/
DDRA = 0x00; /*方向输入*/
PORTB = 0xFF; /*电平设置*/
DDRB = 0xFF; /*方向输出*/
PORTC = 0xFF;
DDRC = 0x00;
PORTD = 0xFF;
DDRD = 0x20;
/*蜂鸣器测验试*/
delay_ms(100);
beep(300);
/*按键及指示灯测试*/
delay_ms(1000);
while (1) {
temp = PINA; /*提取按键*/
if (temp != 0xFF) {
PORTB = temp; /*显示按键值*/
beep(200);
while (PINA != 0xFF); /*等待按键松开*/
}
if ((PIND & 0x04) == 0x00) { /*INT键退出*/
break;
}
}
/*SPI总线HC595芯片测试*/
PORTB = 0xEF;
delay_ms(3000);
SPI_MasterInit(); /*初始SPI接口*/
PORTB = 0xF0; /*打开4位数码管*/
for (temp = 0; temp < 10; temp ++) {
SPI_595_Out(disp[temp]); /*显示数据输出*/
delay_ms(500);
}
SPCR = 0x00; /*关闭SPI接口*/
/*IIC总线24C02芯片测试*/
PORTB = 0xDF;
delay_ms(3000);
twi_write(0x08, 0x55); /*写入标志*/
delay_ms(10);
twi_read(0x08, &temp); /*读出标志*/
delay_ms(500);
if (temp == 0x55) { /*校验标志*/
beep(300);
}
else {
beep(1500);
}
/*DS302芯片测试*/
PORTB = 0xBF;
delay_ms(1000);
ds1302_init(); /*初始化DS302*/
time_buf[5] = 0x55;
time_buf[6] = 0x00;
ds1302_write_time(); /*写入标志*/
delay_ms(2000);
ds1302_read_time(); /*读出标志*/
if ((time_buf[5] == 0x55) && (time_buf[6] != 0x00)) {/*校验标志*/
beep(300);
}
else {
beep(1500);
}
/*串口测试*/
PORTB = 0xF7;
delay_ms(3000);
Uart_Init();
while (1) {
temp = Uart_Receive(); /*等待接收数据*/
PORTB = ~temp; /*显示低电平有效*/
Uart_Transmit(temp); /*发送收到的数据*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -