ARM程序模块.docx
《ARM程序模块.docx》由会员分享,可在线阅读,更多相关《ARM程序模块.docx(8页珍藏版)》请在冰豆网上搜索。
![ARM程序模块.docx](https://file1.bdocx.com/fileroot1/2023-1/14/68f1c469-5c64-443d-89aa-8154ced25d9f/68f1c469-5c64-443d-89aa-8154ced25d9f1.gif)
ARM程序模块
/*********************************************************************************
函数名:
spi_init
函数功能:
spi初始化为主机模式
*********************************************************************************/
voidspi_init(void)
{
SPI_SPCR=(0<<3)|
(1<<4)|
(1<<5)|
(0<<6)|
(0<<7);
SPI_SPCCR=0X52;
}
/*******************************************************************************
函数名:
write_data
函数功能:
主机模式发送数据
*********************************************************************************/
voidwrite_data(uint8data)
{
SPI_SPDR=data;
while(0==(SPI_SPSR&0X80));
}
/*********************************************************************************
函数名:
delay
函数功能:
简单延时
*********************************************************************************/
voiddelay(uint32timerdelay_flag)
{
for(;timerdelay_flag>0;timerdelay_flag--);
}
/********************************************************************************************
函数名:
bcdtodata_transition
函数功能:
将调整的断码转换为数据
*******************************************************************************************/
uint32bcdtodata_transition(uint32*bcd)
{
uint32bcd_data;
bcd_data=bcd[5]*100000+
bcd[4]*10000+
bcd[3]*1000+
bcd[2]*100+
bcd[1]*10+
bcd[0]*1;
returnbcd_data;
}
/********************************************************************************************
函数名:
datatobcd_transition
函数功能:
将数据转换为断码
输入参数:
*array_data数组首地址,To_convert_data待转换数据
*******************************************************************************************/
voiddatatobcd_transition(uint32*array_data,uint32To_convert_data)
{
array_data[0]=To_convert_data%10;
array_data[1]=To_convert_data/10%10;
array_data[2]=To_convert_data/100%10;
array_data[3]=To_convert_data/1000%10;
array_data[4]=To_convert_data/10000%10;
array_data[5]=To_convert_data/100000%10;
}
/*********************************************************************************
函数名:
shizhong
函数功能:
时钟的进位
*********************************************************************************/
voidshizhong()
{
if(timer[0]==10)
{
timer[0]=0;
timer[1]++;
if(timer[1]==6)
{
timer[1]=0;
timer[3]++;
if(timer[3]==10)
{
timer[3]=0;
timer[4]++;
if(timer[4]==6)
{
timer[4]=0;
timer[6]++;
if(timer[6]==4)
{
timer[6]=0;
timer[7]++;
if(timer[7]==3)
{
timer[7]=0;
}
}
}
}
}
}
}
/*********************************************************************************
函数名:
data_play
函数功能:
将数据显示在数码管上,并且可以修改
*********************************************************************************/
voiddata_play(volatileuint32*data,uint32scan_flag,uint32key_flag)
{
uint32move_flag=0;/*移动标志*/
uint32flicker_flag=0;/*闪烁标志*/
uint32revamp_flag=0;/*修改标志*/
if(key_flag==1)
{
revamp_flag=1;/*修改标志置位*/
}
if(revamp_flag==1)
{
flicker_flag++;/*闪烁标志自增*/
if(flicker_flag==10000)
{
flicker_flag=0;
}
if(key_flag==2)
{
move_flag++;
if(data[move_flag]>=10)
{move_flag++;}
if(move_flag==8)
{move_flag=0;}
}
if(key_flag==3)
{
data[move_flag]++;
if(data[move_flag]==10)
{data[move_flag]=0;}
}
if(key_flag==4)
{
move_flag=0;/*移动标志清零*/
revamp_flag=0;/*修改标志清零*/
}
if(scan_flag==move_flag)
{
IO0CLR=0X01;
if(flicker_flag<5000)
write_data(digitable[data[move_flag]]);
if(flicker_flag>5000)
write_data(0x00);
write_data(selectable[move_flag]);
IO0SET=0X01;
}
else
{
IO0CLR=0X01;
write_data(digitable[data[move_flag]]);
write_data(selectable[move_flag]);
IO0SET=0X01;
}
}
else
{
IO0CLR=0X01;
write_data(digitable[data[move_flag]]);
write_data(selectable[move_flag]);
IO0SET=0X01;
}
}
/*********************************************************************************
函数名:
key_return
函数功能:
读取按键的值并返回
*********************************************************************************/
uint32key_return(uint32scan_flag)
{
uint32key_resurt=12;
if(0==(IO0PIN&0x02))
{
delay(500);
if(0==(IO0PIN&0x02))
{
key_resurt=scan_flag;
while(!
(IO0PIN&0X02));
}
}
returnkey_resurt;
}