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
- /*******************************************************************************
- Platform: AVR mega16学习板(www.iccavr.com)
- Project : 实验十一:SPI实验(数码管显示)
- Clock F : 3.6864M
- Software: WinAVR-20090313+Proteus7.4
- Author : 林夕依然
- Version : 08.12.10
- Updata : 09.02.26 模块化
- 09.05.04 增加proteus仿真模型,仿真通过
- 09.07.22 WinAVR-20090313调试通过
- comments:
- 1、以学习板4位数码管为硬件电路
- 2、练习SPI的配置和使用
- 3、学习74HC595八位移位寄存器芯片的使用
- 4、进行此实验请插上JP1的所有8个短路块,JP6(SPI_EN)短路块
- 5、参考:...mcu\ICCAVR学习板\旧版例程\M16学习板实验程序\4-LED数码管程序
- *******************************************************************************/
- #include <avr/io.h>
- #include <util/delay.h>
- #include "spi.h"
- #include "port_init.h"
- #define uchar unsigned char
-
- /*数码管0,1,2,3,4,5,6,7,8,9显示*/
- uchar tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
-
- /*-----------------------------------------------------------------
- 函数名称: void HC595out(uchar i)
- 函数功能: 74HC595数据输出显示
- 参 数:
- 返 回 值: 无
- -----------------------------------------------------------------*/
- void HC595out(uchar i)
- {
- PORTB&=~(1<<4); //等待数据传输,595存储寄存器数据不变
- SPIMasterTransmit(i); //传输数据
- PORTB|=(1<<4); //595移位寄存器的数据进入数据存储寄存器,并在数码管上显示
- }
-
- int main(void)
- {
- uchar i="0";
- port_init();
- PORTD=0XFF;
-
- SPImasterInit(); //SPI初始化
- while(1)
- {
- i++;
- if(i>9)
- {
- i=0;
- }
- HC595out(tab[i]);
- _delay_ms(500);
- }
- }
2、spi.c
- #include <avr/io.h>
- #define uchar unsigned char
-
- /*-----------------------------------------------------------------
- 函数名称: void SPImasterInit(void)
- 函数功能: SPI初始化为主机
- 参 数:
- 返 回 值: 无
- SPI控制寄存器介绍
- SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
- SPIE:中断使能
- SPE :SPI使能
- DORD:数据次序 1为LSB首先发送,0为MSB首先发送
- MSTR:主从选择 1为主,0为从MSTR置位时选择主机模式,否则为从机.如果MSTR为"1",
- SS配置为输入,且被拉低,则MSTR 被清零,寄存器SPSR 的SPIF 置位.用户必须重新
- 设置MSTR 进入主机模式。
- CPOL: 时钟极性见ATMEGA16L(中文)P130
- CPHA: 时钟相位
- SPR1, SPR0: SPI 时钟速率选择1 与0 SPR1 和SPR0 对从机没有影响。
- -----------------------------------------------------------------*/
- void SPImasterInit(void) //SPI初始化
- {
- DDRB|=(1<<7)|(1<<5); //设置SCK,MOSI为输出,其他为输入
- SPCR|=(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);//使能SPI,主模式,Fck/128
- }
- /*-----------------------------------------------------------------
- 函数名称: void SPIMasterTransmit(uchar TranData)
- 函数功能: SPI数据传输
- 参 数:
- 返 回 值: 无
- -----------------------------------------------------------------*/
- void SPIMasterTransmit(uchar TranData)
- {
- SPDR=TranData; //数据放入SPI寄存器中
- while(!(SPSR&(1<<SPIF))); //等待数据传输完毕
- }
3、port_init.c
- #include <avr/io.h>
-
- void port_init(void)
- {
- DDRA =0X00; //上拉
- PORTA=0XFF;
- DDRB =0XFF; //低四位输出低电平,使四位数码管均作显示
- PORTB=0XF0; //MISO输出高电平,关闭595移位寄存器的数据清零功能
- DDRC =0X00; //上拉
- PORTC=0XFF;
- DDRD =0X00; //上拉
- }
4、spi.h
- #define uchar unsigned char
- void SPImasterInit(void);
- void SPIMasterTransmit(uchar TranData);
5、port_init.h
四、完整项目文件下载
http://bbs.armavr.com/thread-913-1-2.html
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
NI PAC平台引领工业控制发展新技术
苹果掀起AMOLED面板争夺战:中国企业能否在8.6代线赛道实现对韩反超?
C++编程思想.第1卷.标准C++导引
CAN实现手册
555打鼾抑制器电路图
亚马逊云科技中东区域服务中断,阿联酋、巴林受影响
星链移动版官宣将实现 “太空 5G 网速,数据密度提升百倍”
iCAN教学实验开发平台简介
印度报纸对神五的评价文章
美国国家半导体LM3445芯片的应用领域及优点介绍
苹果iPhone 17 5G毫米波天线模块采用法国 Soitec FDSOI硅衬底技术
555DGK—63L双功能消毒柜电路图
三星拟通过结构重构解决 HBM4E 功耗瓶颈,缺陷率降低 97%
555间歇式臭氧发生器电路图
NAND闪存供应紧张 群联电子要求客户缩短账期并预付货款
《电信法》为何难产23年 专家指出十大问题
兆易创新与涂鸦智能达成深度合作,共启AI+IoT生态协同新篇
BSP FRQ(PDF) BSP详细介绍
BSP FRQ( BSP详细介绍)
NEC Electronics Applilet 软件安装演示视频
NEC Electronics DEMO 演示视频
美国在印度人工智能影响力峰会提出人工智能主权倡议
MWC上中国智能手机市场呈现两极分化:内存涨价致手机本周或将提价
c++编程思想 第二卷 使用编程技术
555它激式臭氧发生器电路图
为RISC-V第三方IP筑牢安全防线:实现全设计供应链中基于通用缺陷枚举的全面安全验证
我将出差半个多月
“神五”电子通信系统大部分技术和产品为国产
网络语录zt
555使用臭氧管的电子消毒电路图