📄 4位动态164.c
字号:
/*--------------------------------------------------------------------------------
★★ 标准串口和模拟串口4位164动态数码管显示程序 ★★
1.CPU :89C51 晶振2MHz
---------------------------------------------------------------------------------*/
#include <reg51.h>
#include <intrins.h>
#define LEN_OF_DIS 7//当数码管位数变化修改此处即可
unsigned char code dispcode[]={0x84,0xee,0x45,0x46, 0x2e,0x16,0x14,0x8e,
0x04,0x06,0xff,0xfe,0xfd,0xfb,0xf7}; //共阴极字型码
unsigned char disbuf[LEN_OF_DIS]={0,0,0,0,0,0,0};
unsigned char ms=0;
sbit DAT=P1^3;
sbit CLK=P1^4;
sbit ASD=P1^2;
sbit bSD=P1^1;
sbit cSD=P1^0;
sbit dSD=P1^5;
//模拟串口//
/* void send(unsigned char da)
{
unsigned char k;
for(k=0;k<8;k++)
{
DAT=da&0x01; //从低位开始逐一移出(与线路有关,这是段A对应QG),164的时序是从D0逐步到D7.移完8次后整体再向下(bit)
da>>=1;
CLK=0;
CLK=1;
}
}
/********************************/
void send(unsigned char a1)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(_crol_(a1,i)&0x80)
DAT =1;
else DAT=0;
CLK =0;
CLK =1;
}
}
//显示函数,先分离再显示//
void display(unsigned int tmp,unsigned int tmp1,unsigned int tmp2)
{
disbuf[3]=tmp1%10;
disbuf[2]=tmp1/10;
disbuf[1]=tmp%10;
disbuf[0]=tmp/10;
disbuf[4]=tmp2/10;
//
//SBUF=dispcode[disbuf[ms%LEN_OF_DIS]]; //标准串口
//P0=_cror_(0xfe,1);
//P0=0x7f;
//delay(1); //决定刷新频率
//P0=P0|0xff; //传完后关闭当前显示位(不然显示不全),同时不影响没有用到的端口
}
void Init()
{
TMOD=0x01;
// SCON=0x00; //串口工作方式1
// ES=1;
// IP=0x10;
TH0=0xf8;
TL0=0x50;
TR0=1;
ET0=1;
EA=1;
}
//主函数//
void main()
{ Init();
//display(11,32);
while(1){; }
}
void Timer0(void)interrupt 3 using 1
{ ASD=1;
bSD=1;
cSD=1;
dSD=1;
TH0=0xf8;
TL0=0x50;
ASD=1;
bSD=1;
cSD=1;
dSD=1;
display(11,32,10);
//SBUF=dispcode[disbuf[ms%LEN_OF_DIS]];
send(dispcode[disbuf[ms]]); //模拟串口
switch(ms)
{
case 0:
ASD=0;
bSD=0;
cSD=0;
dSD=0;
break;
case 1:
ASD=1;
bSD=0;
cSD=0;
dSD=0;
break;
case 2:
ASD=0;
bSD=1;
cSD=0;
dSD=0;
break;
case 3:
ASD=1;
bSD=1;
cSD=0;
dSD=0;
break;
case 4:
ASD=0;
bSD=0;
cSD=1;
dSD=0;
break;
case 5:
ASD=1;
bSD=0;
cSD=1;
dSD=0;
break;
}
// P0&=(ms|0xf0);//当用P0口的口线作时钟和数据时用此指令。
ms++;
if(ms==LEN_OF_DIS)
{
ms=0;
}
//BitSelect=_crol_(BitSelect,1);
////
}
//串口中断//
/*void uart() interrupt 4
{
TI=0;
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -