📄 6led.c
字号:
/*********************************************
example program for PIC download board
16F877A @3.6864MHz
test 6-7seg LED
www.mcufan.com
*********************************************/
#include <pic.h>
#include <pic1687x.h>
__CONFIG(WDTDIS & HS & LVPDIS & DEBUGDIS);
/*该程序用于在8个LED上依次显示1~8等8个字符*/
static volatile unsigned char table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};
/*volatile unsigned char data; */
#define PORTAIT(adr,bit) ((unsigned)(&adr)*8+(bit)) /*绝对寻址位操作指令*/
static bit PORTA_4 @ PORTAIT(PORTA,4);
/*spi初始化子程序*/
void SPIINIT()
{
PIR1=0;
SSPCON=0x32; /* SSPEN=1;CKP=0 , FOSC/64 */
SSPSTAT=0xC0;
TRISC=0x03; /*SDO引脚为输出,SCK引脚为输出*/
}
/*系统各输入输出口初始化子程序*/
void initial()
{
TRISA=0x00; /*A口设置为输出*/
INTCON=0x00; /*关闭所有中断*/
PORTA_4=0; /*LACK送低电平,为锁存做准备*/
}
/*SPI发送子程序*/
void SPILED(unsigned char byte)
{
SSPBUF=byte; /*启动发送*/
do
{
;
}while(SSPIF==0); /*等待发送完毕*/
SSPIF=0; /*清除SSPIF标志*/
byte=SSPBUF;
}
/*主程序*/
main()
{
unsigned char i,data;
initial(); /*系统初始化*/
SPIINIT(); /*SPI初始化*/
PORTA_4=0;
for(i=7;i>0;i--) /*连续发送8个数据*/
{
data=table[i]; /*通过数组的转换获得待显示的段码*/
SPILED(data); /*发送显示段码显示*/
}
PORTA_4=1; /*最后给锁存信号,代表显示任务完成*/
while(1)
{
PORTA_4=0;
for(i=9;i>2;i--) /*连续发送8个数据*/
{
data=table[i]; /*通过数组的转换获得待显示的段码*/
SPILED(data); /*发送显示段码显示*/
}
PORTA_4=1; /*最后给锁存信号,代表显示任务完成*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -