📄 led频率.txt
字号:
#include <iom16v.h>
#include <macros.h>
char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
char position[4]={0x7f,0xbf,0xdf,0xef};
char dis_buff[8]; // 显示缓冲区,存放要显示的8个字符的段码值
char posit=0;
char freq_ok=0;
char time2_new;
unsigned int freq;
unsigned long int freq_temp;
#define uchar unsigned char
#define uint unsigned int
//////////////////////////////////
void DelayMs(uint i ) //Ms级延时,参数i为延时时间
{uint j;
for(;i!=0;i--)
{for(j=1142;j!=0;j--) {;}} //原来8000,改为1142//
}
//////////////////
void Display(void) // 8位LED数码管动态扫描函数
{
PORTC=0xff;
PORTA = led_7[dis_buff[posit]];
//if (posit==5)PORTA=PORTA|0x80;
PORTC=position[posit];
DelayMs(2);
if (++posit>=4)posit=0;
}
//////////////////////////////
void display(void) // 8位LED数码管动态扫描函数
{
PORTC=0xff;
PORTA = led_7[dis_buff[posit]];
//if (posit==5)PORTA=PORTA|0x80;
PORTC=position[posit];
if (++posit >=4)posit=0;
}
/////////////////////////////////////////////
// T/C0 比较匹配中断服务,250个计数脉冲中断一次
#pragma interrupt_handler Compare0:20
void Compare0(void)
{
time2_new=TCNT2;
TCNT2=0;
TIFR |= 0x02;
freq_temp=freq;
freq=0;
freq_ok=1;
}
/////////////////////////////////////////
// T/C2 比较匹配中断服务,500us一次
#pragma interrupt_handler Compare2:4
void Compare2(void)
{
freq++;
SEI(); // 开中断,允许中断嵌套,T/C0中断可打断该中断服务
display();
}
////////////////////////////
void freq_to_disbuff(void) // 频率值转化为BCD码送显示缓冲区
{
char i,j=3;
for (i=0;i<=3;i++)
{
dis_buff[j-i]=freq_temp%10;
freq_temp=freq_temp/10;
}
}
void main(void)
{
char i;
DDRB=0x00;
PORTB=0x00;
DDRA=0xFF; // LED数码管
DDRC=0xFF;
//Display();
// T/C2初始化
TCCR2=0x0B; //A 内部时钟,32分频(8M/32=250KHz),CTC模式,250K
TCNT2=0x00; //基时为4us
OCR2=0x7D; // OCR2 = 0xF9(249),(249+1)/500=0.5ms f9f97D F9 125
// T/C0初始化
TCCR0=0x0E; //外部T0脚下降沿触发计数,CTC模式
TCNT0=0x00;
OCR0=0xF9; // OCR0 = 0xF9(249),(249 + 1)=250
TIMSK=0x82; // 允许T/C2、T/C0比较匹配中断
for(i=0;i<=3;i++)dis_buff[i]=0;
SEI(); // 开放全局中断
while (1)
{
if (freq_ok)
{
freq_temp =freq_temp*125+time2_new; // 累计250个脉冲的时间间隔
freq_temp =(125000000)/(2.183465*freq_temp); // 换算成频率
freq_to_disbuff(); // 频率值送显示
freq_ok=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -