三:这个有点难搞的数码管

数码管的代码写了两三天了 到今天好像是第三天了 一直不知道是啥问题(今天写博客好像也有点忘记遇到的问题是啥了)
哦哦想起来了 在写“数码管驱动函数”的时候 对P0的赋值 我一开始是采取 按位赋值的方法 就是我一开始给P0的每一个口都用sbit取了“小名” 然后在后面的函数调用阶段用switc语句就单单给某几个口高电平 这样会导致显示不到我想要的某一位数码管这样的问题 我想只点亮一个数码管的时候就出问题了 它同时亮了好几个(后面的图片是代码区别和显示区别) 所以我就需要采用对P0口整体赋值的方法来解决
还有一个问题是导致了显示异常 然后我在数码管那部分函数里面加上了延时就解决了
接下来上代码:
数码管静态显示代码如下:
一、主函数:

include <STC15F2K60S2.H>

include "HC138_F.h"

include "Nixie.h"

void main()
{
unsigned char i,j;
while(1)
{
// for(j=0;j<16;j++)
// {
// for(i=0;i<8;i++)
// {
// Nixie_Drive(i,j);
// }
// }
// for(j=0;j<8;j++)
// {
// for(i=0;i<16;i++)
// {
// Nixie_Drive(j,i);
// }
// }
for(i=0;i<16;i++)
{
ManyNixie_Drive(i);
}
}
}

二、HC138译码器芯片设置函数:

include <STC15F2K60S2.H>

sbit WR_138=P4^2;
sbit A_138=P2^5;
sbit B_138=P2^6;
sbit C_138=P2^7;

void Set_HC138_F(unsigned char x)
{
WR_138=0;
switch(x)
{
case 4:
{
C_138=1;
B_138=0;
A_138=0;
break;
}
case 5:
{
C_138=1;
B_138=0;
A_138=1;
break;
}
case 6:
{
C_138=1;
B_138=1;
A_138=0;
break;
}
case 7:
{
C_138=1;
B_138=1;
A_138=1;
break;
}
}
}
三、数码管部分函数:

include <STC15F2K60S2.H>

include "HC138_F.h"

include "Delay.h"

unsigned char code Content[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

void Nixie_Drive(unsigned char pos,unsigned char content)
{
Set_HC138_F(6);
P0=0x01<<pos;
Set_HC138_F(7);
P0=Content[content];
Delay(100);

}

void ManyNixie_Drive(unsigned char content)
{
Set_HC138_F(6);
P0=0xff;//就是这里 害得我花了好长时间去调代码!!!
Set_HC138_F(7);
P0=Content[content];
Delay(100);
}



posted on 2025-03-22 13:05  bright彬  阅读(9)  评论(0)    收藏  举报