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

📄 disp_2.c

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 C
字号:
/*
模块说明:

	LED数码管中断动态显示程序。
	1、程序通过SPI接口输出数据到HC595芯片驱动LED数据管简单显示。
	2、动态调度由片内定时器1中断产生,中断周期为5mS。
	3、内部1 M晶振,程序采用单任务方式,软件延时。
	4、此模块文件为实用文件,可直接用于项目中。
	www.iccavr.com
*/
#include "iom16v.h"
#include <macros.h>

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 + -