|
新鲜出炉! ATmage128的EEPROE实战!
按按键进行调节模式,相对应LED有不同的反应,关机后保存数据
#include<iom128v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
uint bai, shi, ge;
uchar temp ;
uchar smg[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0xff};
uchar tttt(uchar t)
{
t=0x03;
}
uchar ledsmg(uchar kl);
void delay(uchar n)
{
uint i=0,j=0;
for (i=0;i<n;i++)
for (j=0;j<20;j++);
}
void PO_init(void)
{
DDRA=0XFF; //LED IO口设为输出
PORTA=0X00;
DDRB |=0xff; //PB4设为输出
PORTB|=0xff; //关闭PB4外接的LED
DDRC=0XFF; //数码管段选设为输出
PORTC=0X00;
DDRF |=0X03; //LED及数码管锁存IO口设为输出
PORTF|=0X0E;
PORTF&=0xF7; //锁存数据关闭数码管
DDRD=0;//全部设为输入
PORTD=0xff;//全部上拉
PIND=0xff;//设初始值
}
void display(void )
{
PORTC =smg[bai];
P5_1;
P5_0;
delay(3);
PORTC =smg[shi];
P6_1;
P6_0;
delay(3);
PORTC =smg[ge];
P7_1;
P7_0;
delay(3);
}
void data_do(uchar temp_d)
{
uint shit;
bai = temp_d/100; //分出百,十,和个位
shit= temp_d%100;
shi = shit/10;
ge = shit%10;
}
void E_write(uint E_add, uchar E_data)//写字节数据
{
while(EECR & (1<<EEWE));
EEARH = 0;
EEARL = E_add;
EEDR = E_data;
EECR |= (1<<2);
EECR |= (1<<1);
SREG |= (1<<7);
}
uchar E_read(uint E_add) //读字节数据
{
while(EECR & (1<<EEWE));
EEARH = 0;
EEARL = E_add;
EECR |= (1<<EERE);
return EEDR;
}
void key(void)
{
if(PIND == 0xfe) //按键--加键
{
delay(3);
if(PIND == 0xfe)
{
while(PIND == 0xfe);
temp++;
if(temp>=6)temp=0;
}
}
}
void main()
{
PO_init();
temp=E_read(5); //读出记录
E_write(5,temp); //写入记录
while (1)
{
key()
.................................................
代码只贴一部份,附件中有全部
|
评分
-
查看全部评分
|