论坛元老
 
- 积分
- 5486
- 金钱
- 5486
- 注册时间
- 2018-3-25
- 在线时间
- 16 小时
|
发表于 2018-3-26 14:40:26
|
显示全部楼层
// PIC16F877A Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <pic16f877a.h>
/*
* 显示模块的引脚定义如下(从上到下)
* ① 电源 +5V
* ② SER IN ------------串行数据输入引脚 595芯片的 3 脚
* ③ RCK ------------串行信息输入后 并行信息输出使能引脚 595芯片的 12 脚
* ④ SRCK ------------串行数据中的每一“位”所需要的 时钟信号 595芯片的 13 脚
* ⑤ 电源地
*/
#define RCK_595 PORTDbits.RD2 //并行数据输出使能
#define SCLK_595 PORTDbits.RD1 //每一"位"所需的时钟信号
#define SDATA_595 PORTDbits.RD0 //串行数据输入
unsigned char leddata[]={ //数码管显示的段信息,自定义的连线 不是标准的段码信息 共阴极
0x77, //"0"
0x41, //"1"
0x3B, //"2"
0x6B, //"3"
0x4D, //"4"
0x6E, //"5"
0x7E, //"6"
0x43, //"7"
0x7F, //"8"
0x6F, //"9"
0x5F, //"A"
0x7C, //"B"
0x36, //"C"
0x79, //"D"
0x3E, //"E"
0x1E, //"F"
0x5D, //"H"
0x34, //"L"
0x57, //"n"
0x75, //"u"
0x1F, //"P"
0x78, //"o"
0x08, //"-"
0x00, //熄灭
0x00 //自定义
};
void WR_595(unsigned char temp)
{
unsigned char j;
for (j=0;j<8;j++)
{
if(temp&0x01)
{
SDATA_595=1;
}
else
{
SDATA_595=0;
}
SCLK_595=1; //上升沿发生移位
asm("nop");
asm("nop");
SCLK_595=0;
temp=temp>>1 ;
}
}
void OUT_595(void)
{
RCK_595=1; //上升沿将数据送到输出锁存器
asm("nop");
asm("nop");
asm("nop");
RCK_595=0;
}
void init()
{
TRISD=0x00;
}
void main()
{
unsigned int i=12345;
init();
SCLK_595=0;
RCK_595=0;
while(1)
{
WR_595(leddata[i/10000]);
WR_595(leddata[i%10000/1000]);
WR_595(leddata[i%10000%1000/100]);
WR_595(leddata[i%10000%1000%100/10]);
WR_595(leddata[i%10000%1000%100%10]);
OUT_595();
while(1);
}
} |
|