数码管的代码写了两三天了 到今天好像是第三天了 一直不知道是啥问题(今天写博客好像也有点忘记遇到的问题是啥了)
哦哦想起来了 在写“数码管驱动函数”的时候 对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);
}



浙公网安备 33010602011771号