打印
[其他产品]

PIC单片机学习之SPI操作数码管

[复制链接]
565|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
phosphate|  楼主 | 2020-2-10 12:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/****************************
现象:通过查询的方式利用SPI接口实现对74HC595的操作,并在数码上显示。
*****************************/
#include <pic.h>
#include "../head/config.h"  //包含自己的配置头文件

__CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);//对熔丝位进行设置
                                                                                                                                                
uchar data_temp;
//单片机LED共阳极段码表(带小数点)    0~9
const char table1[]={0X0A,0XFA,0X8C,0XA8,0X78,0X29,0X09,0XBA,0X08,0X28};
//数码管位码表
const char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//端口初始化子程序
void SPI_init(void)
{
    PIR1 = 0x00;            //    SSPIF=0;没有中断发生
    SSPCON = 0x30;        //主控方式,Fosc/4,CKP=1空闲时钟电平为高,SSPEN=1使能同步串行功能
    SSPSTAT = 0xC0;        //SMP=1    时序信号末尾采样输入数据,CKE=1时序信号上升沿发送数据
    TRISC = 0x00;            //SDO引脚为输出,SCK引脚为输输出,SDI引脚输出
}
//SPI发送数据子程序
void SPI_tx(uchar spi_data)
{
    SSPBUF = spi_data;
    do
    {
        ;
    }while(!SSPIF);//等待产生SSP中断,等待发送完成
    SSPIF=0;
    data_temp=SSPBUF;//将接受到的数据放在变量中
}
void main(void)
{
    uchar i;
    SPI_init();
    while(1)
    {
        for(i = 0;i < 8;i++)
        {
            RC4=0;
            
            SPI_tx(table);        //先发送位选码            
            SPI_tx(table1[i+2]);        //再发送要显示的数据
            
            RC4=1;
        }
    }                    //最后给出锁存信号。任务完成
}

使用特权

评论回复
沙发
kavent| | 2020-2-10 19:00 | 只看该作者
好好学习,天天向上!

使用特权

评论回复
板凳
643757107| | 2020-2-11 09:45 | 只看该作者
让我想起了MAX7219

使用特权

评论回复
地板
TsaiRH| | 2020-2-13 14:38 | 只看该作者
谢谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

393

帖子

1

粉丝