📄 code.c
字号:
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#define vref 496
uint8_t ledcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /*LED译码*/
uint8_t ledbuff[6]; /*显示缓冲*/
void delay(uint16_t time) /*延时*/
{
while(time>0)
time--;
}
void leddisplay(void) /*数码管显示函数*/
{
uint8_t i;
for (i=0;i<6;i++)
{
PORTB=ledbuff[i]; /*需要显示缓冲区数据送到PORTB*/
PORTD=~(1<<i);
delay(10); /*每一位显示保持一定时间*/
PORTD|=(1<<i); /*关 闭显示*/
}
}
INTERRUPT(SIG_ADC) /*AD变换完成中断处理程序*/
{
unsigned int i,temp;
unsigned int lo_val, hi_val; /*转换寄存器的低位与高位*/
unsigned long val;
lo_val=ADCL; /*读出AD变换结果*/
hi_val=ADCH;
val=(((unsigned long)hi_val)<<8)|((unsigned long)lo_val); /*低8位和高8位数据合成16位*/
temp=(unsigned int)((unsigned long)(val*vref)/1024); /*AD变换结果转换为电压值*/
for(i=0;i<3;i++) /*分位显示*/
{
ledbuff[i]=ledcode[temp%10];
temp=temp/10;
}
ledbuff[2]|=0x80; /*显示小数点*/
ADCSR|=(1<<ADSC); /*启动下一次AD转换 */
leddisplay();
}
int main( void )
{
DDRD=0x3f;
PORTD=0xff;
DDRB=0xff;
PORTB=0xff; /*I/O口初始化*/
uint8_t i;
for(i=0;i<3;i++) /*清空缓冲区数据 */
ledbuff[i]=ledcode[0];
ledbuff[3]=0x00;
ledbuff[4]=0x5e; /*显示'd'*/
ledbuff[5]=0x77; /*显示'A' */
ADMUX =0x00; //ADC寄存器初始化
ADCSR=(1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE)|0X06;
sei();
for(;;){};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -