📄 7281.c
字号:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//变量I/O口定义
sbit dat =P1^0 ;
sbit clk =P1^1 ;
sbit key =P3^3 ;
uchar key_number;
uint tmr;
//函数定义
void delay(uchar);
void write(uchar,uchar);
void send_byte(uchar);
uchar receive_byte(void);
uchar read(uchar);
void main()
{
for(tmr=0;tmr<0xffff;tmr++);
write(0x12,0x80);
write(0x15,0x00); //0x15为寄存器地址,是hex译码格式,0x00为数据,第一个0是表示数码管的位置,2个0表示显示值
write(0x15,0x11); // 第一位显示1
write(0x15,0x22); //第二位显示2
write(0x15,0x33);
write(0x15,0x44);
write(0x18,0x07); //段寻址寄存器,可独立寻址每一段,此为令0段的dp点亮
//write(0x18,0x06);
//write(0x1c,0x7f); //RP位为1时,先写入影像寄存器
write(0x11,0x80); //控制闪烁速度
//write(0x1b,0x01); //RP位为1时,先写如影像寄存器
write(0x10,0xfe);//第0位闪烁
while(1)
{
while(key);
key_number= read(0x13);
write(0x15,0x30+(key_number&0xf0)/16);
write(0x15,0X40+(key_number&0x0f));
//write(0x15,0x0f);
}
}
void send_byte(uchar send_byte)
{
uchar bit_counter;
clk=0;
clk=1;
do
{
clk=0;
clk=1;
}while(dat);
clk=0;
clk=1;
while(!dat);
for(bit_counter=0;bit_counter<8;bit_counter++)
{
if((send_byte&0x80)==0)
{
dat=0;
}
else
{
dat=1;
}
send_byte=send_byte<<1;
clk=0;
clk=1;
delay(1);
}
dat=1;
delay(2);
}
uchar receive_byte(void)
{
uchar bit_counter,in_byte;
clk=0;
clk=1;
while(dat);
clk=0;
clk=1;
for(bit_counter=0;bit_counter<8;bit_counter++)
{
delay(1);
in_byte=in_byte*2;
if(dat)
{
in_byte=in_byte|0x01;
}
clk=0;
clk=1;
}
delay(2);
return(in_byte);
}
//读内部寄存器的值
uchar read(uchar reg_add)
{
send_byte(reg_add|0x80);
return(receive_byte());
}
//写入内容
void write(uchar reg_add,uchar write_data)
{
send_byte(reg_add); // 发数据
send_byte(write_data); // 发数据
}
void delay(uchar time)
{
while(time!=0)
{
time--;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -