📄 74hc164.c
字号:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit gewe=P0^6; //数码管个位使能
sbit shiwe=P0^7; //数码管十位使能
sbit CLK=P0^0; //74HC164 CLK
sbit CLR=P0^1; //74HC164 CLR
sbit DAT=P0^3; //74HC164 DAT
void sendbyte(uchar byte);
uchar Count,timecount;
uchar code LEDData[] = {
0x41,0xe7,0x52,0x62,
0xe4,0x68,0x48,0xe3,
0x40,0x60,0xc0,0x4c,
0x5e,0x46,0x58,0xd8,0xff};
/*********************************************************
50MS延时函数
*********************************************************/
void delay_50ms(unsigned int t) //50MS演示程序
{
unsigned int j;
for(;t>0;t--)
for(j=6245;j>0;j--)
{;}
}
/********************************************************
74HC164串转并口_显示1位数码管函数
*********************************************************/
void display1()
{
unsigned char h;
while(1)
{
for(h=0;h<10;h++) //显示0-9
{
delay_50ms(1);
sendbyte(h);
delay_50ms(20);
}
h=0;
}
}
/********************************************************
74HC164串转并口_显示2位数码管函数
*********************************************************/
void display2()
{
uchar j,k;
j=Count/10; //十位
k=Count%10; //个位
sendbyte(j); //发个位数据
gewe=0; //开个位显示
Delay(5);
gewe=1; //关个位显示
sendbyte(k); //发十位数据
shiwe=0; //开十位显示
Delay(5);
gewe=1; //关闭显示
shiwe=1;
}
/********************************************************
74HC164串口转并口
*********************************************************/
void sendbyte(uchar byte)
{
uchar num,c;
num=LEDData[byte];
for(c=0;c<8;c++) //这里的8指串口数据8位
{
CLK=0;
DAT=num&0x80; //(0x80即十进制的128, 二进制的10000000 按位发送)
CLK=1;
num<<=1;
}
}
/********************************************************
主函数
*********************************************************/
main()
{
gewe=0;
shiwe=0;
Count=0x00;
TMOD=0x01;
TH0=0x10;
TL0=0x00; //50ms定时
EA=1;
ET0=1;
TR0=1;
while(1)
{
display2(); //显示
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -