#include<reg52.h>
#define uint unsigned int
sbit sk=P2^0; //控制数据锁存芯片 段选
sbit wk=P2^1; //控制位数据锁存芯片 位选
void yanshi_100us(uint i) //12兆晶振 100微秒单位延时函数
{
uint k,s;
for(s=i;s>0;s--)
{
for( k=11; k>0;k--);
}
}
void display(uint skong,uint wkong,char date[])
{
uint j;
char code datew[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //数码管右边最低位
skong=1;
P1=date[0]; //对开始位数码管置数
skong=0;
for(j=0;j<8;j++) //扫描每个数码管
{
wkong=1;
P1=datew[j]; //选择某位数码管接收显示数据
wkong=0;
yanshi_100us(30); //数码管余辉时间
wkong=1; //数码管显示清零
P1=0xff;
wkong=0;
if(j<7) //不能对第9个数码管赋显示数据
{
skong=1;
P1=date[j+1]; //对下一位数码管置显示数据
skong=0;
}
}
}
void main()
{
while(1)
{
char date1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x80}; //共阴数码管0--9加点
display(sk,wk,date1);
}
}
上面这段程序编译时没错误,但数码管显示错误。现在由于位想写一个通用的数码管显示函数display,问问高手怎样才能把程序开始定义 “ sbit sk=P2^0; //控制数据锁存芯片 段选sbit wk=P2^1; //控制位数据锁存芯片 位选” 中的sk和wk传到display()函数中去????
请不要告诉我把sk改成skong,wk改成wkong,display函数只传date1就行了啊!!我主要是问高手们在display()函数中有什么办法来实现“P2^0”,
“P2^1”或者P端口传送,在不修改display()情况下,当单片机与数码管连接改变时 也能正常调用display()函数,望高手们解惑????
|