📄 dtdisplayc.c
字号:
/****************************************************************
74HC164驱动的6位数码管动态显示的KEIL C语言演示程序
****************************************************************/
#include <at89x51.h>
#include <Delay.h>
#define SDA P2_7 //74LS164 SAD
#define SCK P2_6 //74LS164 SCK
#define BIT5 P2_5 //数码管位1
#define BIT4 P2_4 //数码管位2
#define BIT3 P2_3 //数码管位3
#define BIT2 P2_2 //数码管位4
#define BIT1 P2_1 //数码管位5
#define BIT0 P2_0 //数码管位6
#define uchar unsigned char
#define uint unsigned int
void display();
code uchar szdm[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff}; /*共阳数码管0-9和全灭的16进制代码*/
data uchar displaybuff[]={0x06,0x05,0x04,0x03,0x02,0x01}; /*在数码管上显示1-6 六个数字*/
/***************************************************************************************************/
/*显示主程序*/
/***************************************************************************************************/
void main() {
while(1)
{
display();
}
}
/*************************************************************************************************/
/*8位数据从74HC164的串行输入端输入,从输出端并行输出*/
/*************************************************************************************************/
void senddata(uchar dd) {
uchar j;
for (j=0;j<8;j++) {
SDA=(bit)(dd&0x01);
SCK=1; SCK=0;
dd=dd>>1;
}
}
/****************************************************************************************************/
/*动态扫描显示程序*/
/****************************************************************************************************/
void display() {
senddata(szdm[displaybuff[0]]);
BIT0=0;
Delay_ms(10);
BIT0=1;
senddata(szdm[displaybuff[1]]);
BIT1=0;
Delay_ms(10);
BIT1=1;
senddata(szdm[displaybuff[2]]);
BIT2=0;
Delay_ms(10);
BIT2=1;
senddata(szdm[displaybuff[3]]);
BIT3=0;
Delay_ms(10);
BIT3=1;
senddata(szdm[displaybuff[4]]);
BIT4=0;
Delay_ms(10);
BIT4=1;
senddata(szdm[displaybuff[5]]);
BIT5=0;
Delay_ms(10);
BIT5=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -