关于PIC用HC595驱动数码管的问题

我想写个程序在Proteus上仿真下,结果编译通过却运行后不符合功能要求,我是要在数码管上轮流显示1-9字符的。在HI-TECH9.6下运行出现警告:(1273)Omni... 我想写个程序在Proteus上仿真下,结果编译通过却运行后不符合功能要求,我是要在数码管上轮流显示1-9字符的。在HI-TECH 9.6下运行出现警告:(1273) Omniscient Code Generation not available in Lite mode (warning)(不知有没影响)。我用step by step调试发现PORTC根本不随我设置的RC3、RC2、RC1而变化。哪位有经验的大侠帮我看下,指点下迷津,看看这代码有什么问题还是其他问题,不胜感激,问题解决了追加高分,谢谢。
#include <pic.h>
#include <pic16f684.h>
//__CONFIG(0x1FF1);
#define uchar unsigned char
#define uint unsigned int
//#define SH RC1;//当MR为高电平,OE为低电平时,数据在SHCP上升沿进入移位寄存器,在STCP上升沿输出到并行端口
//#define Data RC2;//串行数据输入口
//#define ST RC3;
const uchar table[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint x);
void initial();
void Write(uchar num);
void output();
void main()
{
uint i;
uchar num;
initial();
while(1)
{
for(i=0;i<10;i++)
{
num=table[i];
Write(num);
delay(10);
}
}
}
/*延时*/
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
/*初始化函数*/
void initial()
{
PORTA=0x00;
PORTC=0x00;
ANSEL=0xC0;
ADCON0=0x00;
TRISC=0x00;
TRISA=0x00;
}
/*数据写入HC595*/
void Write(uchar num)
{
uint j;
uchar datatemp;
RC3=0;
for(j=0;j<8;j++)
{
RC1=0;
datatemp=(num&0x80);
if(datatemp==0x80)
{
//PORTC=0x04;
RC2=1;
}
else
{
//PORTC=0x03;
RC2=0;
num<<=1;
}
delay(10);
RC1=1;
}
output();
}
/*输出数据*/
void output()
{
//initial();
//RC3=0;
RC3=1;
//RC3=0;
}
展开
 我来答
micropower
2010-12-03 · TA获得超过1万个赞
知道大有可为答主
回答量:2619
采纳率:50%
帮助的人:1553万
展开全部
跟编译器的警告没关系。你程序写少了。回去好好看16F684的中文数据手册的第40页右上角的初始化样例程序。PORTC口和AD模块还有比较器模块复用,而单片机上电时默认是比较器模拟输入打开。初始化portc口时,要把TRISA、ANSEL、还有CMCON0需要设置(CMCON0=0x07才能让PORTC设置为数据IO口)。
你注意到PORTC要设置ANSEL,但却没看到还有个CMCON0需要设置。这是初学者操作IO口时候 经常犯得毛病。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式