资讯详情

基于AVR单片机的24C08数据操作的C语言程序设计

#include #define uint unsigned int

#define uchar unsigned char

#include "I2C_drive.h"//包含I2C总线驱动程序软件包

uchar const seg_data[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};//0~以及熄灭符的段码表

uchar const bit_tab[]={0xbf,0x7f};//7,8只数码管位选表

uchar disp_buf[2]={0,0};//定义两个显示缓冲单元

uchar val;

#define beep_0 (PORTD=PORTD&0xbf) //PD7上的蜂鸣器发出声音

#define beep_1 (PORTD=PORTD|0x40) //PD7上的蜂鸣器不发声

/********函数功能:延迟函数********/

void Delay_ms(uint xms)

{

int i,j;

for(i=0;i

{ for(j=0;j<1140;j ) ; }

}

/*********以下是蜂鸣器响的函数********/

void beep()

{

uint bb;

for (bb=0;bb<20;bb )

{

beep_0; ///蜂鸣器响

Delay_ms(1);

beep_1; ///关闭蜂鸣器

Delay_ms(1);

}

}

/********端口设置函数********/

void port_init(void)

{

PORTA = 0xFF;//输出高电平

DDRA = 0xFF;//设置为输出

PORTC = 0xff; //输出高电平

DDRC = 0xFF; //设置为输出

DDRD =(0<

PORTD = 0xFF;//PD6输出高电平,其他输入带上拉

}

/********定时器0初始化********/

void timer0_init()

{

SREG = 0x80; //使全局中断

TIMSK|=(1<

TCCR0|=(1<

TCNT0 = 240; ///定时初值设置,定时时间2ms

}

/********以下是显示函数********/

void Display()

{

uchar tmp;//定义显示暂存

static uchar disp_sel=0;///显示位选择计数器,显示程序知道现在显示哪个数字管,初始值为0

tmp=bit_tab[disp_sel];///根据当前当前位选计值显示哪个数字管

PORTC=tmp;//送PC控制选定的数字管点亮

tmp=disp_buf[disp_sel];///根据当前位选数值检查的数字的显示码

tmp=seg_data[tmp];//取显示码

PORTA=tmp;//送到PA口显示相应的数字

disp_sel ;//位选计值加1,指向下一个数字管

if(disp_sel==2)

disp_sel=0;//如果两个数字管再次显示,让其回0,再次扫描

}

/********以下是定时器T0中断函数, 动态扫描管动态扫描********/

#pragma interrupt_handler timer0_ovf:10

void timer0_ovf(void)

{

TIFR=0x01;//写1清除定时器T0标志位

TCNT0=240; ///设计初始值,设定时间为2ms

Display();//调整显示函数

}

/********以下是主函数********/

void main()

{

timer0_init();

I2C_init();

port_init();

Delay_ms(100);

val=read_EEPROM(0x02);

if(val>=100) val=0;//防止第一次阅读EEPROM数据时出错

while(1)

{

if((PIND&0x04)==0)//若K1键按下

{

Delay_ms(10);//延时10ms去抖

if((PIND&0x04)==0)

{

while(!(PIND&0x04));//等待K1键释放

val ;

write_EEPROM(val,0x02);

beep();

if(val==99)val=0;

}

}

disp_buf[0]=val/10;

disp_buf[1]=val;

}

}

标签: 08n08p传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台