📄 hc164.c
字号:
/********************************************************************************
四位静态数码管演示程序
*********************************************************************************/
/**************************************************************************
4位静态显示模块演示程序
***************************************************************************/
#include <AT89X51.H>
#include <Delay.h>
#define uchar unsigned char
#define Uint unsigned int
#define SDA0 P0_0 //74LS164 SAD
#define SCK0 P0_1 //74LS164 SCK
#define SDA1 P0_2
#define SCK1 P0_3
#define SDA2 P0_4
#define SCK2 P0_5
#define SDA3 P0_6
#define SCK3 P0_7
#define SMGPOW P1_2 //数码管总电源
void senddata0(uchar dd);
void senddata1(uchar dd);
void senddata2(uchar dd);
void senddata3(uchar dd);
code uchar szdm[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff,0x00}; //0-9,熄灭,全亮(含小数点) 共阳数字数码管代码
data uchar displaybuff[]={0x01,0x02,0x03,0x04,0x0b,0x0a}; //0x0a 表示熄灭状态,0x0b表示全亮
void main() {
P1=0XFF;
P2=0XFF;
P3=0XFF;
DelayMs(5000); //延时一段时间保证74HC164复位。
P0=0; //SDA SCK 置零
SMGPOW=0; //打开显示板电源
senddata0(szdm[displaybuff[4]]); //以下四条语句使四个数码管全亮(含小数点),测试数码管的每一段是否全部正常
senddata1(szdm[displaybuff[4]]);
senddata2(szdm[displaybuff[4]]);
senddata3(szdm[displaybuff[4]]);
DelayMs(3000);
senddata0(szdm[displaybuff[0]]); //第一位数码管显示1
senddata1(szdm[displaybuff[1]]); //第二位数码管显示2
senddata2(szdm[displaybuff[2]]); //第三位数码管显示3
senddata3(szdm[displaybuff[3]]);//第四位数码管显示4
while(1); //无限循环
}
void senddata0(uchar dd) { //第一位数码管显示函数
uchar j;
for (j=0;j<8;j++) {
SDA0=(bit)(dd&0x01);
SCK0=1; SCK0=0;
dd=dd>>1;
}
}
void senddata1(uchar dd) { //第二位数码管显示函数
uchar j;
for (j=0;j<8;j++) {
SDA1=(bit)(dd&0x01);
SCK1=1; SCK1=0;
dd=dd>>1;
}
}
void senddata2(uchar dd) { //第三位数码管显示函数
uchar j;
for (j=0;j<8;j++) {
SDA2=(bit)(dd&0x01);
SCK2=1; SCK2=0;
dd=dd>>1;
}
}
void senddata3(uchar dd) { //第四位数码管显示函数
uchar j;
for (j=0;j<8;j++) {
SDA3=(bit)(dd&0x01);
SCK3=1; SCK3=0;
dd=dd>>1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -