搜索
您的当前位置:首页AVR学习-SPI实验(数码管子显示)

AVR学习-SPI实验(数码管子显示)

来源:智榕旅游
http://bbs.armavr.com/ ARM-AVR嵌入式开发论坛

实验11:SPI实验(数码管显示)(GCC)

更多笔记:http://bbs.armavr.com/

一、程序结构

二、仿真效果

三、程序源码 1、main.c

1. 2. 3. /****************************************************************************** Platform: AVR mega16学习板(www.iccavr.com) Project : 实验十一:SPI实验(数码管显示) Author:linxiyiran E_mail:605987969@qq.com ※转载请注明出处

http://bbs.armavr.com/ ARM-AVR嵌入式开发论坛

4. 5. 6. 7. 8. 9.

Clock F : 3.6864M

Software: WinAVR-20090313+Proteus7.4 Author : 林夕依然 Version : 08.12.10 Updata : 09.02.26 模块化

09.05.04 增加proteus仿真模型,仿真通过

10. 09.07.22 WinAVR-20090313调试通过 11. comments:

12. 1、以学习板4位数码管为硬件电路 13. 2、练习SPI的配置和使用

14. 3、学习74HC595八位移位寄存器芯片的使用

15. 4、进行此实验请插上JP1的所有8个短路块,JP6(SPI_EN)短路块

16. 5、参考:...mcu\\ICCAVR学习板\\旧版例程\\M16学习板实验程序\\4-LED数码管程序

17. ******************************************************************************/ 18. #include 19. #include 20. #include \"spi.h\" 21. #include \"port_init.h\" 22. #define uchar unsigned char 23.

24. /*数码管0,1,2,3,4,5,6,7,8,9显示*/

25. uchar tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; 26.

27. /*----------------------------------------------------------------- 28. 函数名称: void HC595out(uchar i) 29. 函数功能: 74HC595数据输出显示 30. 参 数: 31. 返 回 值: 无

32. -----------------------------------------------------------------*/ 33. void HC595out(uchar i) 34. {

35. PORTB&=~(1<<4); //等待数据传输,595存储寄存器数据不变 36. SPIMasterTransmit(i); //传输数据

37. PORTB|=(1<<4); //595移位寄存器的数据进入数据存储寄存器,并在数码管上显示 38. }

Author:linxiyiran E_mail:605987969@qq.com ※转载请注明出处

http://bbs.armavr.com/ ARM-AVR嵌入式开发论坛

39.

40. int main(void) 41. {

42. uchar i=0; 43. port_init(); 44. PORTD=0XFF; 45.

46. SPImasterInit(); //SPI初始化 47. while(1) 48. { 49. i++; 50. if(i>9) 51. { 52. i=0; 53. }

54. HC595out(tab[i]); 55. _delay_ms(500); 56. } 57. }

2、spi.c

1. 2. 3. 4. 5. 6. 7. 8. 9.

#include

#define uchar unsigned char

/*----------------------------------------------------------------- 函数名称: void SPImasterInit(void) 函数功能: SPI初始化为主机 参 数: 返 回 值: 无 SPI控制寄存器介绍

10. SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0 11. SPIE:中断使能 12. SPE :SPI使能

13. DORD:数据次序 1为LSB首先发送,0为MSB首先发送

Author:linxiyiran E_mail:605987969@qq.com ※转载请注明出处

http://bbs.armavr.com/ ARM-AVR嵌入式开发论坛

14. MSTR:主从选择 1为主,0为从MSTR置位时选择主机模式,否则为从机.如果MSTR为\"1\15. SS配置为输入,且被拉低,则MSTR 被清零,寄存器SPSR 的SPIF 置位.用户必须重新 16. 设置MSTR 进入主机模式。

17. CPOL: 时钟极性见ATMEGA16L(中文)P130 18. CPHA: 时钟相位

19. SPR1, SPR0: SPI 时钟速率选择1 与0 SPR1 和SPR0 对从机没有影响。

20. -----------------------------------------------------------------*/ 21. void SPImasterInit(void) //SPI初始化 22. {

23. DDRB|=(1<<7)|(1<<5); //设置SCK,MOSI为输出,其他为输入

24. SPCR|=(1<26. /*----------------------------------------------------------------- 27. 函数名称: void SPIMasterTransmit(uchar TranData) 28. 函数功能: SPI数据传输 29. 参 数: 30. 返 回 值: 无

31. -----------------------------------------------------------------*/ 32. void SPIMasterTransmit(uchar TranData) 33. {

34. SPDR=TranData; //数据放入SPI寄存器中

35. while(!(SPSR&(1<3、port_init.c

1. 2. 3. 4. 5. 6. 7. 8. 9.

#include

void port_init(void) {

DDRA =0X00; //上拉 PORTA=0XFF;

DDRB =0XFF; //低四位输出低电平,使四位数码管均作显示

PORTB=0XF0; //MISO输出高电平,关闭595移位寄存器的数据清零功能 DDRC =0X00; //上拉

Author:linxiyiran E_mail:605987969@qq.com ※转载请注明出处

http://bbs.armavr.com/ ARM-AVR嵌入式开发论坛

10. PORTC=0XFF; 11. DDRD =0X00; //上拉 12. }

4、spi.h

1. 2. 3.

#define uchar unsigned char void SPImasterInit(void);

void SPIMasterTransmit(uchar TranData);

5、port_init.h

1. void port_init(void);

四、完整项目文件下载

http://bbs.armavr.com/thread-913-1-1.html

Author:linxiyiran E_mail:605987969@qq.com ※转载请注明出处

因篇幅问题不能全部显示,请点此查看更多更全内容

Top