📄 rs.c
字号:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
void Ini_IO(void);
void IN_595(uchar temp);
void OUT_595(void);
void clear(void);
void Ini_Timer0();
void time_display(void);
void delay(uchar time);
//74HC138的A,B,C三个选择端//
sbit A_138=P1^0; //A
sbit B_138=P1^1; //B
sbit C_138=P1^2; //C
//Col_Sel_E2=L_OE Col_Sel_E1 =选择的是1,3排的有效还是2,4有效//
sbit E1=P1^3; //L_D Col_Sel_E1
sbit E2=P1^4; //L_OE Col_Sel_E2
//SER的控制//
sbit R2_SER=P0^1; //2R_SER 2排的595数据输入端
sbit R4_SER=P0^3; //4R_SER 4排的595数据输入端
sbit R1_SER=P0^0; //1R_SER 1排的595数据输入端
sbit R3_SER=P0^2; //3R_SER 3排的595数据输入端
//SCK的控制//
sbit SCK=P0^5; //L_CP12 R_SRC 34R_SRC
//RCK的控制//
sbit RCK=P0^4; //12R_RC 34R_RC
//传感器控制
//sbit SENSOR=P3^3;
uchar code number[10][16]={
{0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00}, //0
{0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00}, //1
{0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00}, //2
{0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00}, //3
{0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00}, //4
{0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00}, //5
{0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00}, //6
{0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00}, //7
{0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00}, //8
{0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00} //9
};
//uchar code number[16]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void main()
{
Ini_IO();
clear();
while(1)
time_display();
}
/*===============================参赛队显示==============================*/
void time_display(void)
{
uchar i,j;
uchar data_138=0;
for(j=0;j<16;j++)
{
for(i=0;i<8;i++)
{
IN_595(number[i][j]);
}
OUT_595();
P1=data_138;
data_138++;
delay(500);
E2=0;
}
}
//*********************将所有I/O口置为原始状态*********************//
void Ini_IO(void)
{
P1=0;
R1_SER=1;
R2_SER=1;
R3_SER=1;
R4_SER=1;
SCK=0;
RCK=0;
}
////////////////////////////////清屏/////////////////////////////////////
void clear(void)
{ uchar i,k,j;
for(j=0;j<8;j++)//对于1个横排的控制
{
for (k=0;k<8;k++)
{
for(i=0;i<8;i++ )
{
SCK=0;
_nop_();
_nop_();
SCK=1;
_nop_();
_nop_();
SCK=0;
}
OUT_595();
}
}
}
//*************将74hc595的0xff转变成8位的数据类型******************//
void IN_595(uchar temp)
{
uchar k;
for(k=0;k<8;k++)
{
SCK=0;
if(temp&0x80) R1_SER=0;//serr1_r3_flag=1;
else R1_SER=1;//r1_r3_flag=0;
SCK=1;
temp<<=1;
}
}
///////////////////////////////595输出////////////////////////////////////
void OUT_595(void)
{
RCK=0;
_nop_();
_nop_();
RCK=1; //上升沿锁存数据/
_nop_();
_nop_();
RCK=0;
}
void delay(uchar time)
{
uchar i;
for(i=0;i<time;i++)
{
_nop_();
_nop_();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -