⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kj-led.c

📁 51单片机的c语言编程 基于avr amtel16控制灯显示
💻 C
字号:
#include "avr/io.h"
#include "macros"
unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0};
unsigned char led_buf[] = {1, 2, 3, 4, 0};   /*显示信息*/
/*------------------------------------------------------------------*-  Disp_Init()
  显示初始化-*------------------------------------------------------------------*/
void Disp_Init(void) { /*初始化定时器*/
 OCR1A = 625;      /*计数周期为5mS,F=1M*/
 TIMSK |= (1 << OCIE1A);    /*比较中断A允许*/
 SREG = 0x80;
 TCCR1A = 0x00;
 TCCR1B = 0x08;      /*定时器工作在CTC计数器模式*/
 TCCR1B |= 0x02;      /*设置定时器的分频值为8分频*/
 
 /*SPI接口初始化*/
 DDRB |= (1<<PB5) | (1<<PB7);  /* 设置MOSI 和SCK 为输出,其他为输入 */
 SPCR = (1<<SPE) | (1<<MSTR)
  | (1<<SPR1) | (1<<SPR0);  /* 使能SPI 主机模式,时钟为fck/128 */
 
 /*中断使能*/
 SEI();
}/*------------------------------------------------------------------*-
  
  Int_TCCR1A()
  LED数码管动态显示函数 定时器'T1',A组比较中断产生5mS周期性中断
 在中断里刷新显示
 
-*------------------------------------------------------------------*/
#pragma interrupt_handler Int_TCCR1A: 7
void Int_TCCR1A(void) { unsigned char temp;
 static unsigned char i; PORTB &= ~(1 << 4);     /*准备锁存*/
 PORTB |= 0x0F;
 PORTB |= (1 << 4);     /*锁存数据*/
 if (i == 3) {
  PORTB &= ~(1 << 2);
  }
 if (i == 2) {
  PORTB &= ~(1 << 1);
  }
 if (i == 1) {
  PORTB &= ~(1 << 0);
  }
 if (i == 0) {
  PORTB &= ~(1 << 3);
  }
 
 temp = led_buf[i] % 16;  /**/
 temp = disp[temp];   /**/
 SPDR = temp; if (i > 3) {
  i = 0;
  }
 else {
  i ++;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -