微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助 基础spi 和74hc595 点亮数码管

求助 基础spi 和74hc595 点亮数码管

时间:10-02 整理:3721RD 点击:
======================================
问题:数码管显示的数字不对,仿真还是程序有误 大神们
======================================
#include <pic.h>
char table[8]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8};
#define PORTAIT(adr, bit) ((unsigned)(&adr)*8+(bit)) /*绝对寻址位操作指令*/
static bit PORTA_5@PORTAIT(PORTA,5);
void delay(char t)
{
while(t--);
}
/*spi 初始化子程序*/
void SPIINT(void)
{
PIR1=0;//清除spi中断标志
SSPSTAT=0xC0;//在串行时钟sck下降沿发送数据
SSPCON=0x30;//* SSPEN=1; CKP=0 , FOSC/4 */
TRISC=0x00;/*SDO 引脚为输出, SCK 引脚为输出*/
}
/*系统各输入输出口初始化子程序*/
void initial(void)
{
TRISA=0x00; /*A 口设置为输出*/
INTCON=0x00; /*关闭所有中断*/
PORTA_5=0; /*LACK 送低电平,为锁存做准备*/
}
/*SPI 发送子程序*/
void SPILED(char dat)
{
SSPBUF=dat; /*启动发送*/
while(!SSPIF); /*等待发送完毕*/
SSPIF=0;/*清除 SSPIF 标志*/
}
/*主程序*/
main()
{
char i=0;
initial(); /*系统初始化*/
SPIINT();/*SPI 初始化*/
        while(1)
        {
                for(i=0;i<9;i++)
                {
                        SPILED(table[2]); /*发送显示段码显示*/
                }
                PORTA_5=1;
        }
}

====================================================
======================================================


for(i=0;i<9;i++)
                {
                        SPILED(table[i]); /*发送显示段码显示*/
                }
                PORTA_5=1;

--------------------------------------------------------------------------------
目的就想8个数据发完 然后显示出来

已经解决,下面这种
SSPSTAT=0xC0;//在串行时钟sck下降沿发送数据
SSPCON=0x30;//* SSPEN=1; CKP=0 , FOSC/4 */
改成:
SSPSTAT=0x80;//在串行时钟sck下降沿发送数据
SSPCON=0x20;//* SSPEN=1; CKP=0 , FOSC/4 */

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top