×
嵌入式 > 嵌入式开发 > 详情

驱动max7219的程序

发布时间:2020-10-09 发布时间:
|
#include

#include

#define uchar unsigned char
#define uint unsigned int
//定义输出io口
#define Y1_OUT DDRC|=BIT(5);
#define Y1_H PORTC|=BIT(5);
#define Y1_L PORTC&=~BIT(5);
#define Y2_OUT DDRD|=BIT(6);
#define Y2_H PORTD|=BIT(6);
#define Y2_L PORTD&=~BIT(6);
#define Y3_OUT DDRD|=BIT(7);
#define Y3_H PORTD|=BIT(7);
#define Y3_L PORTD&=~BIT(7);
#define Y4_OUT DDRB|=BIT(0);
#define Y4_H PORTB|=BIT(0);
#define Y4_L PORTB&=~BIT(0);
#define Y5_OUT DDRC|=BIT(4);
#define Y5_H PORTC|=BIT(4);
#define Y5_L PORTC&=~BIT(4);
#define Y6_OUT DDRB|=BIT(1);
#define Y6_H PORTB|=BIT(1);
#define Y6_L PORTB&=~BIT(1);
//ad求平均的个数
#define N 3
//数码管亮度调节0x00-0xff
#define P 0x01
uint t1,t2,t3,t4,tt1,tt2,tt3,tt4;
uint addata,adc;
uchar g1,g2,g3,g4;
////////////////////////////////////////////////////////////////////////////////
void port_init()
{
DDRC&=BIT(0)&BIT(1)&BIT(2)&BIT(3);//AD转换口设置为输入、无上拉
PORTC&=BIT(0)&BIT(1)&BIT(2)&BIT(3);

DDRD|=0x3f;
PORTD|=0x3f; //配置PD口为输入,有上拉电阻
DDRD&=0xC0;

//Y1_OUT;Y2_OUT;Y3_OUT;Y4_OUT;Y5_OUT;Y6_OUT;
// Y1_H;Y2_H;Y3_H;Y4_H;Y5_H;Y6_H;
}
//spi初始化/////////////////////////////////////////////////////////////////////
void spi_init()
{
DDRB|=BIT(2)|BIT(3)|BIT(5);//置spi数据口为输出
SPCR=0x51;
PORTB|=BIT(2);
SPSR&=0x7f;
}
//初始化max7219数码管模块////////////////////////////////////////////////////////
void initmax7219()
{
spi_init();
max7219(0x0c,0x00); //掉电模式:0,普通模式:1
max7219(0x09,0xff); //译码方式:BCD码
max7219(0x0a,P); //亮度调节
max7219(0x0b,0x07); //扫描界限;4个数码管显示
max7219(0x0c,0x01); //掉电模式:0,普通模式:1
max7219(0x0f,0x00); //显示测试:1;测试结束,正常显示:0
delay_ms(100);
}
//定时器1初始化子程序///////////////////////////////////////////////////////////
void init_timer1()
{
TCCR1B|=0x04;//256分频
TCNT1H=0xff;//高8位初值
TCNT1L=0x03;//低8位初值
TIMSK|=BIT(2);//定时器1的中断使能
}
//定时器0初始化子程序///////////////////////////////////////////////////////////
void init_timer0()
{
TCCR0|=0x04;//256分频
TCNT0=0x00;//初值
TIMSK|=BIT(0);//定时器0的中断使能
}
//延时函数//////////////////////////////////////////////////////////////////////
void delay_ms(uint i)
{
while(i--)
{
uint j;
for(j=1;j<=1332;j++);
}
}
//向max7219写入地址和数据///////////////////////////////////////////////////////
void max7219(uchar add,uchar date)
{
PORTB&=~BIT(2);
SPDR=add;
while(!(SPSR&0x80));
add=SPSR;//读取SPSR来清除SPIF;
SPDR=date;
while(!(SPSR&0x80))
date=SPSR;
PORTB|=BIT(2);
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
现场总线系统的功能安全评价