//在LED数码管上显示读出的数据,可用复位键刷新显示
//编译环境 AVR Studio 4.17/AVR GCC
//系统时钟7.3728MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms
//***********************************************************************
// 包含文件
//***********************************************************************
#include
#include
#define F_CPU 7372800 // 单片机主频为7.3728MHz,用于延时子程序
#include
#include
#include
#include
//***********************************************************************
// 定义变量区
//***********************************************************************
#define Data_IO PORTA //数码管数据口
#define Data_DDR DDRA //数码管数据口方向寄存器
#define D_LE0 PORTD &= ~(1 << PD4) //数码管段控制位为0,锁存端口数据
#define D_LE1 PORTD |= (1 << PD4) //数码管段控制位为1,锁存器输出与端口一致
#define W_LE0 PORTD &= ~(1 << PD5) //数码管位控制位为0
#define W_LE1 PORTD |= (1 << PD5) //数码管位控制位为1
#define delay_us(x) _delay_us(x) //AVR GCC延时函数 x(us)
#define delay_ms(x) _delay_ms(x) //AVR GCC延时函数 x(ms)
#define uchar unsigned char
#define uint unsigned int
//***********************************************************************
// 共阴数码管显示的断码表0~F
//***********************************************************************
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uint A1,A2,A3; //定义的变量,显示数据处理
//***********************************************************************
// IO端口初始化
//***********************************************************************
void system_init()
{
Data_IO=0xFF; //数据口为输出
Data_DDR=0xFF;
PORTD=0xFF; //74HC573的控制口,设置为输出
DDRD=0xFF;
PORTB=0XFF;
DDRB=0XFF;
}
//*************************************************************************
// 74HC573控制数码管动态扫描显示函数,显示采集到的温度
//*************************************************************************
void Display_EEPROM(void)
{
uchar i,j;
system_init();
j=0x01; //此数据用来控制位选
for(i=0;i<5;i++) //用后3位数码管来显示
{
D_LE1;
W_LE1;
Data_IO=~j;
W_LE0;
j=(j<<1);
Data_IO=0x00;
D_LE0;
delay_ms(1);
}
D_LE1;
W_LE1;
Data_IO=~j;
W_LE0;
j=(j<<1);
Data_IO=table[A1];
D_LE0;
delay_ms(1);
D_LE1;
W_LE1;
Data_IO=~j;
W_LE0;
j=(j<<1);
Data_IO=table[A2];
D_LE0;
delay_ms(1);
D_LE1;
W_LE1;
Data_IO=~j;
W_LE0;
j=(j<<1);
Data_IO=table[A3];
D_LE0;
delay_ms(1);
D_LE1;
W_LE1;
Data_IO=0xff;
W_LE0;
}
//*************************************************************************
// 数据处理函数
//*************************************************************************
void data_do(uchar temp_d)
{
uint A2t;
A1=temp_d/100; //分出百,十,和个位
A2t=temp_d%100;
A2=A2t/10;
A3=A2t%10;
}
//***********************************************************************
// EEPROM读取函数*/
// addr:地址;number:长度;p_buff:读出数据存放指针
//***********************************************************************
void eprom_read(unsigned int addr, unsigned char number, unsigned char *p_buff) {
while(EECR & (1 << EEWE)); //等待前面的写完成
EEARH = 0x00; //写高字节地址
while(number --) {
EEARL = addr ++; //写地址低字节
EECR |= (1 << EERE); //读允许位置1
*p_buff++ = EEDR; //读出EEDR中的数据
}
}
//***********************************************************************
// EEPROM写入函数
// addr:地址;number:长度;p_buff:写入数据存放指针
//***********************************************************************
void eprom_write(unsigned int addr, unsigned char number, unsigned char *p_buff) {
EEARH = 0x00;
while(number --) {
while(EECR & (1 << EEWE)); //等待前面的写完成
EEARL = addr ++; //写地址
EEDR = *p_buff ++; //写数据到EEDR
EECR |= (1 << EEMWE); //主机写入允许位
EECR&=~(1<
}
}
//***********************************************************************
// 主函数
//***********************************************************************
int main(void)
{
unsigned char temp;
system_init(); //系统初始化
eprom_read(0x10, 0x01, &temp); //读出记录
delay_ms(10);
temp ++; //计数值加1
eprom_write(0x10, 0x01, &temp); //写入记录
delay_ms(10);
while (1)
{
data_do(temp); //每启动一次temp加1,记录到EEPROM中
Display_EEPROM(); //显示计数值
}
}
上一篇:ATmega128(DS18B20)
下一篇:ATmega128(DS1302)
推荐阅读最新更新时间:2024-03-16 15:12
设计资源 培训 开发板 精华推荐
- 科学家研发基于AI的身份验证工具 可保护车辆免受网络攻击威胁
- Microchip推出广泛的IGBT 7 功率器件组合,专为可持续发展、电动出行和数据中心应用而设计
- 面向未来驾驶体验 博世推出新型微电子技术
- 英飞凌与马瑞利合作 利用AURIX™ TC4x MCU系列推动区域控制单元创新
- 5C超充,该怎么卷?
- 《2025年度中国汽车十大技术趋势》正式揭晓!你最看好哪个?
- Microchip推出新型VelocityDRIVE™软件平台和车规级多千兆位以太网交换芯片,支持软件定义汽车
- 英特尔中国正式发布2023-2024企业社会责任报告
- can转485数据是如何对应的
- MCU今年的重点:NPU和64位
- ADI和\"西北模电王\"邀您一起下载研读《新概念模拟电路》系列第一本电子书《晶体管》
- 论坛小程序上线!扫码解锁逛坛新姿势啦!!
- 有奖直播:低功耗、小尺寸&高温环境、带触摸功能——瑞萨电子最新16位RL78/G系列单片机介绍
- 有奖直播已结束【如何利用 TI MSPM0 汽车微控制器提高检测和控制性能】
- EEWORLD社区月度奖励,赠E金币!
- 有奖问答|ADI技术直通车——电化学传感测量与气体检测
- MPS EMI 知识充电节盛大开启!赚积分赢好礼!
- 有奖问答 | Azure Sphere物联网解决方案 问答排位赛,你能霸屏多久?
- EEWORLD大学堂3月精彩视频&课程快报
- 揭秘正确选择探头的5大要素 (泰克原装探头促销,高贵不贵,199元起)