专栏中心

EEPW首页 > 专栏 > AVR笔记11:SPI实验(数码管显示)(GCC)

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

发布人:mayer 时间:2009-09-01 来源:工程师 发布文章
AVR笔记11:SPI实验(数码管显示)(GCC)

 

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

一、程序结构
程序结构

下载 (8.5 KB)
2009-8-11 10:26



二、仿真效果
点击看大图

下载 (197.14 KB)
2009-8-11 10:26



三、程序源码
1、main.c

  1. /*******************************************************************************
  2. Platform: AVR mega16学习板(www.iccavr.com)
  3. Project : 实验十一:SPI实验(数码管显示)
  4. Clock F : 3.6864M
  5. Software: WinAVR-20090313+Proteus7.4
  6. Author : 林夕依然
  7. Version : 08.12.10
  8. Updata : 09.02.26 模块化
  9. 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 <avr/io.h>
  19. #include <util/delay.h>
  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. }
  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. #include <avr/io.h>
  2. #define uchar unsigned char
  3.  
  4. /*-----------------------------------------------------------------
  5. 函数名称: void SPImasterInit(void)
  6. 函数功能: SPI初始化为主机
  7. 参 数:
  8. 返 回 值: 无
  9. SPI控制寄存器介绍
  10. SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
  11. SPIE:中断使能
  12. SPE :SPI使能
  13. DORD:数据次序 1为LSB首先发送,0为MSB首先发送
  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<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);//使能SPI,主模式,Fck/128
  25. }
  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<<SPIF))); //等待数据传输完毕
  36. }

3、port_init.c

  1. #include <avr/io.h>
  2.  
  3. void port_init(void)
  4. {
  5. DDRA =0X00; //上拉
  6. PORTA=0XFF;
  7. DDRB =0XFF; //低四位输出低电平,使四位数码管均作显示
  8. PORTB=0XF0; //MISO输出高电平,关闭595移位寄存器的数据清零功能
  9. DDRC =0X00; //上拉
  10. PORTC=0XFF;
  11. DDRD =0X00; //上拉
  12. }

4、spi.h

  1. #define uchar unsigned char
  2. void SPImasterInit(void);
  3. void SPIMasterTransmit(uchar TranData);

5、port_init.h

  1. void port_init(void);

四、完整项目文件下载

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

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

NI PAC平台引领工业控制发展新技术

视频 2009-04-23

苹果掀起AMOLED面板争夺战:中国企业能否在8.6代线赛道实现对韩反超?

C++编程思想.第1卷.标准C++导引

CAN实现手册

亚马逊云科技中东区域服务中断,阿联酋、巴林受影响

星链移动版官宣将实现 “太空 5G 网速,数据密度提升百倍”

iCAN教学实验开发平台简介

视频 2009-04-17

美国国家半导体LM3445芯片的应用领域及优点介绍

视频 2009-04-17

苹果iPhone 17 5G毫米波天线模块采用法国 Soitec FDSOI硅衬底技术

三星拟通过结构重构解决 HBM4E 功耗瓶颈,缺陷率降低 97%

NAND闪存供应紧张 群联电子要求客户缩短账期并预付货款

兆易创新与涂鸦智能达成深度合作,共启AI+IoT生态协同新篇

BSP FRQ(PDF) BSP详细介绍

BSP FRQ( BSP详细介绍)

NEC Electronics Applilet 软件安装演示视频

视频 2009-04-16

NEC Electronics DEMO 演示视频

视频 2009-04-16

美国在印度人工智能影响力峰会提出人工智能主权倡议

MWC上中国智能手机市场呈现两极分化:内存涨价致手机本周或将提价

c++编程思想 第二卷 使用编程技术

为RISC-V第三方IP筑牢安全防线:实现全设计供应链中基于通用缺陷枚举的全面安全验证

网络语录zt

Gao 2003-10-17
更多 培训课堂
更多 焦点
更多 视频

技术专区