📄 icl7135.c
字号:
#include<avr/io.h>
#include<avr/interrupt.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char DisTab[]={
0xfc,0x60, 0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,
0xfd,0x61,0xdb,0xf3,0x67,0xb7,0xbf,0xe1,0xff,0xf7,0x00,0x02,
};
unsigned char DisBuffer[9]={20,20,20,20,20,20,20,20,};
unsigned char DScnt; //STR次数
unsigned char BCD7135[6];//7135数据
unsigned char b1,b2,b3,b4,b5;
unsigned char flag;
unsigned char SampleCnt;//采样次数
unsigned int SampleData[4];
unsigned int Avg;
#define RH_of_7135 PB4
#define set_RH_of_7135 PORTB |= _BV(RH_of_7135);
#define clr_RH_of_7135 PORTB &=~ _BV(RH_of_7135);
#define CLK PB6
#define DAT PB7
#define set_clk PORTB |= _BV(CLK);
#define clr_clk PORTB &= ~_BV(CLK);
#define set_dat PORTB |= _BV(DAT);
#define clr_dat PORTB &= ~_BV(DAT);
//模拟串口发送数据
void send_data(uchar dat)
{
uchar bits;
clr_dat;
set_clk;
for(bits=0;bits<8;bits++)
{
if(dat & 0x01)
{
set_dat;
}else
{
clr_dat;
}
clr_clk
set_clk;
dat>>=1;
}
}
//串口显示
void SelDis(void)
{
uchar sel;
uint i;
for(sel=0;sel<8;sel++)
{
send_data(DisTab[DisBuffer[sel]]);
}
//for(i=0;i<40000;i++);
}
void initAVR(void)
{
PORTB=0xff; //PB口输出
DDRB=0xff;
PORTA=0x00;
//DDRA=0x00;
MCUCR |= _BV(ISC01)+ _BV(ISC11);//中断控制寄存器INT1,0上升沿触发
GICR |= _BV(INT0) + _BV(INT1); //通用中断控制寄存器,使能外部中
//TCCR0=0x19; //为CTC PWM模式,比较匹配输出,分频系数为1
//TIMSK=0x00; //定时器0不允许定时中断
//TIFR=0x00; //清除定时器0中断标志位
//TCNT0=0x00;
//OCR0=0x10; //输出比较寄存器(125Khz)
//SREG=0x80;
sei();
set_RH_of_7135; //启动转换
}
int main()
{
initAVR();
DisBuffer[0]=0;
// SelDis();
while(1)
{
if(flag==1)
{
cli();
flag=0;
DisBuffer[3]=(Avg/1000)%10;
DisBuffer[4]=(Avg/100)%10;
DisBuffer[5]=(Avg/10)%10;
DisBuffer[6]=Avg%10;
// DisBuffer[7]=(SampleData/1000)%10;
SelDis();
set_RH_of_7135;
sei();
}
;
}
}
SIGNAL(SIG_INTERRUPT0) //外部中断0服务程序
{
unsigned int a,b,c,d;
//unsigned char ad;
DScnt++;
BCD7135[DScnt]=PINA;
//if(DScnt==1)SampleCnt=0;
if(DScnt>=5)
{
SREG=0x00;
DScnt=0;
SampleCnt++;
clr_RH_of_7135;//7135转换保持
a=BCD7135[1] & 0x01;
a*=1000;
b=BCD7135[2] & 0x0f;
b*=100;
c=BCD7135[3] & 0x0f;
c*=10;
d=BCD7135[4] & 0x0f;
//Avg=a+b+c+d;
// flag=1;
SampleData[SampleCnt]=a+b+c+d;
// SampleData+=ad;
if(SampleCnt>=3)
{
SampleCnt=0;
flag=1;
Avg=(SampleData[1]+SampleData[2]+SampleData[3])/3;
}
//sei();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -