📄 数码管1.c
字号:
#include<at89x51.h>
#include<intrins.h>
#define unchar unsigned char
code unchar TAB[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e};
unchar sz[2];
unsigned int a=0,d=0,m=9;
// 数码管驱动相关接口
sbit SDATA_595 = P1^0 ; /*串行数据输入*/
sbit SCLK_595 = P1^2; /*移位时钟脉冲*/
sbit RCK_595 = P1^1; /*输出锁存器控制脉冲*/
static void WR_595(unsigned char data num2 )
{
unsigned char data count1;
for(count1=0;count1<=7;count1++)
{
if((num2&0x80)==0x80) /*最高位为1,则向SDATA_595发送1*/
SDATA_595=1; /*发出数据的最高位*/
else
SDATA_595=0;
num2<<=1; /*右移位*/
SCLK_595=0; /*产生上生沿*/
SCLK_595=1;
}
}
/*-------------------------------------------------------------------------------
打开锁存,更新74595输出子程序
---------------------------------------------------------------------------------*/
static void Out_595(void)
{
RCK_595=0;
_nop_();
_nop_();
RCK_595=1; /*上升沿锁存数据*/
}
/*------------------------------------------------------------------------
算法
---------------------------------------------------------------------------*/
void calculate(void) //算法
{if(a<100)
{sz[0]=a/10%10; //十位
sz[1]=a%10;} //个位
else if(a>99)
{sz[0]=m;
sz[1]=m;
}
}
/*-----------------------------------------------------------------------
显示
--------------------------------------------------------------------*/
void disp(void)
{
WR_595(TAB[sz[0]]);
WR_595(0x01);
Out_595();
WR_595(TAB[sz[1]]);
WR_595(0x02);
Out_595();
WR_595(0xff);
WR_595(0x00);
Out_595();
}
/*-----------------------------------------------------------------
主函数
---------------------------------------------------------------*/
main()
{while(1)
{unsigned i,j,k;
for(k=0;k<1;k++)
for(j=0;j<5;j++)
for(i=0;i<120;i++)
{calculate();
disp();}
a++;
if(a>105)
a=0;
if(a>99)
{
m++;
if(m>15)
m=10;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -