本人初涉PIC,开发平台为MPLAB7。5+PICC,学习板为QL200,参考某一程序驱动595,使用PIC16F887芯片仿真显示通过,但使用16f690芯片替换却不能仿真;887能仿真,使用学习板硬件试验却又无显示,烦请有相关实践经验的大大们提示一句。万分多谢以下为程序。
#include "pic.h"
void mDelay(unsigned int i);
const unsigned char LEDCODE[]=
{
0xC0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/
};
#define HC595_SER RC2
#define HC595_SH_CP RC1 //锁存脉冲
#define HC595_ST_CP RC0 //移位脉冲
void HC595_WRITE(unsigned char Data)
{
char i;
for(i=0;i<8;i++)
{
if(Data&0x80) HC595_SER=1;
else HC595_SER=0;
HC595_ST_CP=0;
HC595_ST_CP=1;
Data<<=1;
}
//HC595_SH_CP=0;
//HC595_SH_CP=1;
}
void WRITE_Data(unsigned char d,unsigned char n)
{
HC595_WRITE(LEDCODE[d]);
HC595_WRITE((1<<n));
HC595_SH_CP=0;
HC595_SH_CP=1;//锁存数据输出
}
void System_Init(void)
{
//TRISB=0x00;
TRISC=0x00;
}
void main()
{
System_Init();
while(1)
{
WRITE_Data(2,0);
mDelay(10);
WRITE_Data(0,1);
mDelay(10);
WRITE_Data(1,2);
mDelay(10);
WRITE_Data(0,3);
mDelay(10);
WRITE_Data(2,4);
mDelay(10);
WRITE_Data(0,5);
mDelay(10);
WRITE_Data(1,6);
mDelay(10);
WRITE_Data(0,7);
mDelay(10);
}
}
void mDelay(unsigned int i)
{
unsigned int a,b;
for(a=i;a>0;a--)
for(b=5;b>0;b--);
}
spi.zip
(37.95 KB, 下载次数: 6)
2014-7-21 16:29 上传
点击文件名下载附件
附件为两个仿真电路使用PROTEUS7。8,
2:HC595_SH_CP 、HC595_ST_CP 这2个定义可否定义成HC595_CLK,HC595_RCK,这样容易看。
3: HC595_ST_CP=0;
HC595_ST_CP=1;
Data<<=1;
可否修改:
HC595_ST_CP=0;
Data<<=1;
HC595_ST_CP=1;
4:3个IO脚,是否有上拉电阻?
5:芯片的控制字是否设置正确?
6:程序是否正确烧入MCU?
7:复位电路是否正常?
8:电源是否正确?
//-------------------------------------
void SendTo595(unsigned char Dat){
unsigned char j;
Dat =~Dat;
for (j=0;j<8;j++){
Clk595=0;
Dat595=(Dat & 0x80)>0? 1:0;
Clk595=1;
Dat<<=1; //左移输入
}
void LedOut(unsigned char *pLed){
unsigned char j,n;
n=0x01;
for (j=0;j<6;j++){ //j=>扫描6个LED
//-----------------------
Rck595=0;
SendTo595(~n);
SendTo595(LedAsc[pLed[j]]);
Rck595=1;
tDelay(100); //ab=150
n<<=1;
}
Rck595=0;
SendTo595(0xff);
SendTo595(0);
Rck595=1;
}
多谢MON51:
1:程序看似没有问题,但要优化:HC595_SH_CP 最好等数据全部输出后再操作,不要只输出一位数据就操作。
复:我的是
if(Data&0x80) HC595_SER=1;
else HC595_SER=0;
Data<<=1;
HC595_ST_CP=0;
HC595_ST_CP=1;//引脚模拟时钟一位一位输出
2:HC595_SH_CP 、HC595_ST_CP 这2个定义可否定义成HC595_CLK,HC595_RCK,这样容易看。
复:可以接受
3: HC595_ST_CP=0;
HC595_ST_CP=1;
Data<<=1;
可否修改:
HC595_ST_CP=0;
Data<<=1;
HC595_ST_CP=1;
复:可以试一试
4:3个IO脚,是否有上拉电阻?
开始硬件没有的,后来加入了,还是不行
5:芯片的控制字是否设置正确?
初学未该如何设置,我估计应该是这里出现问题的大,因为使用887仿真可以看到效果。只是想不明白为何690芯片软件仿真却不行,这个比较难理解。
6:程序是否正确烧入MCU?
这个无问题
7:复位电路是否正常?
QL200学习板上的接插芯片应该无问题的,下同
8:电源是否正确?
一周热门 更多>