📄 1357.c
字号:
#include "io8535.h"
#include "math.h"
#pragma interrupt_handler timer:5
int word,data,data_temp,out_temp,adc[9],ip,jp,reg;
float temp;
static int s[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x6F};
void paixu()
{
for(ip=0;ip<8;ip++)
{
for(jp=0;jp<8-ip;jp++)
{
if(adc[jp]<adc[jp+1])
{
adc[8]=adc[jp];
adc[jp]=adc[jp+1];
adc[jp+1]=adc[8];
}
}
}
adc[8]=adc[2]+adc[3]+adc[4]+adc[5];
}
void main()
{
SP=0x025F;
DDRA=0x00;
DDRB=0xFF;
DDRD=0xFF;
PORTB=0x00;
TIMSK=0x40; //允许T/C2溢出中断
TCNT2=0x00; //T/C2计数初值
TCCR2=0x05; //T/C2采用128分频
ADCSR=0xE5; //adc采用32分频
ADMUX=6; //采集第6路的数据
word=0xfe; //置位线初值
SREG=0x80; //允许中断
for(;;)
{
for(ip=0;ip<8;ip++)
{
for(reg=0;reg<3000;reg++)
{;}
adc[ip]=ADC;
}
paixu(); //调用排序函数,对数据进行处理
temp=adc[8]/4;
temp=5*temp; //标度变换(y=5*x-1000)
temp=temp-1000;
data_temp=temp;
data=data_temp%10;data_temp=data_temp/10;data=s[data];
*(volatile unsigned char *)0x100=data;
data=data_temp%10;data_temp=data_temp/10;data=s[data];
*(volatile unsigned char *)0x101=data;
data=data_temp%10;data_temp=data_temp/10;data=s[data];
*(volatile unsigned char *)0x102=data;
data=data_temp%10;data=s[data];
*(volatile unsigned char *)0x103=data;
}//二转十,求得个十百千位,并查出相应位的七段码依次存于SRAM的$100~$103
}
void timer()
{ // T/C2中断执行程序,完成四路数码动态扫描显示
int sreg_temp;
sreg_temp=SREG;
switch(word)
{
case 0xfe:
PORTD=0xfe;
out_temp=*(volatile unsigned char *)0x100;
PORTB=out_temp;
word=0xfd;break;
case 0xfd:
PORTD=0xfd;
out_temp=*(volatile unsigned char *)0x101;
PORTB=out_temp;
word=0xfb;break;
case 0xfb:
PORTD=0xfb;
out_temp=*(volatile unsigned char *)0x102;
PORTB=out_temp;
word=0xf7;break;
case 0xf7:
PORTD=0xf7;
out_temp=*(volatile unsigned char *)0x103;
PORTB=out_temp;
word=0xfe;break;
}
SREG=sreg_temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -