一种可以按照64个LED 指示点击按键的仪器

92 阅读7分钟

一种可以按照64个LED 指示点击按键的仪器

技术领域****

本实用新型涉及一种可以按照64个LED 指示点击按键的仪器,尤其是一种可以按照LED指示点击按键的仪器。

 

背景技术****

现有点击按键都是依靠操作人员的记忆和判断来进行的,一种可以按照64个LED 指示点击按键的仪器是一种可以通过LED灯点亮或熄灭来提示操作人员点击对应64个按键的仪器。这就方便了操作人员点击按键,为操作人员点击按键提供了方便。当1个发光二极管LED灯点亮时,操作人员点击这个发光二极管LED灯对应的那个按键时,这个发光二极管LED灯就会熄灭,相应的,下一个需要操作人员点击的那个按键所对应的发光二极管LED灯就会点亮,此时操作人员点击这个灯所对应的按键,发光二极管LED灯就会熄灭,相应的下一个发光二极管LED灯就会点亮。这样周而复始,操作人员就会按照LED点亮的顺序点击按键达到控制设备的目的。

 

实用新型内容****

为了解决点击64的按键需要大量记忆工作的缺点,一种可以按照64个LED 指示点击按键的仪器是一种可以提示操作人员按照发光二极管LED灯点亮顺序点击按键的仪器。它的电路如图1所示。单片机STC89C52RC(1)控制按键驱动芯片HD7279(2)按照64个发光二极管的点亮顺序点击64个按键。用户可以通过芯片PL2303HX(3)个单片机下载程序。该仪器的电路和程序可以在百度网盘pan.baidu.com/s/12xdhZVVS…

#include <reg52.h>

 

//*** 函数定义 ***

void long_delay(void); // 长延时

void short_delay(void); // 短暂延时

void delay10ms(unsigned char); // 延时10MS

void write7279(unsigned char, unsigned char); // 写入到HD7279

unsigned char read7279(unsigned char); // 从HD7279读出

void send_byte(unsigned char); // 发送一个字节

unsigned char receive_byte(void); // 接收一个字节

 

//*** 变量及I/O口定义 ***

unsigned char digit[5];

unsigned char key_number, j, k,m,n;

unsigned int tmr;

unsigned long wait_cnter;

unsigned char code dis_code[65]

=

   

{16,17,1,2};

unsigned char code dis_code1[256]

=

 

{0,1,2,3,4};

unsigned char code dis_code2[9]

=

 

{0,1,2,3,4,5,6,7,8};

 

 unsigned char code dis_code3[65]

=

 

{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

unsigned char code dis_code4[256]

=

 

{0,1,2,3,4,5,6,7,8,9,10,11,12};

unsigned char code dis_code5[128]

=

 

{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};

 

 unsigned char code dis_code6[65]

=

 

{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

unsigned char code dis_code7[256]

=

 

{0,1,2,3,4,5,6,7,8,9,10};

unsigned char code dis_code8[128]

=

 

{0,1,2,3,4,5,6,7,8,9,10,11};

unsigned char code dis_code9[128]

=

 

{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

 

sbit cs=P1^4; // cs at P1.4

sbit clk=P1^5; // clk 连接于 P1.5

sbit dat=P1^2; // dat 连接于 P1.2

sbit key=P1^3; // key 连接于 P1.3

sbit S1=P0^0; // key 连接于 P1.3

sbit S2=P0^1; // key 连接于 P1.3

sbit S3=P0^2; // key 连接于 P1.3

//****** HD7279A 指令 ******

#define CMD_RESET 0xa4

#define CMD_TEST 0xbf

#define DECODE0 0x80

#define DECODE1 0xc8

#define CMD_READ 0x15

#define UNDECODE 0x90

#define RTL_CYCLE 0xa3

#define RTR_CYCLE 0xa2

#define RTL_UNCYL 0xa1

#define RTR_UNCYL 0xa0

#define ACTCTL 0x98

#define SEGON 0xe0

#define SEGOFF 0xc0

#define BLINKCTL 0x88

 

 

 

void write7279(unsigned char cmd, unsigned char dta)

{

send_byte (cmd);

send_byte (dta);

}

 

unsigned char read7279(unsigned char command)

{

send_byte(command);

return(receive_byte());

}

 

void send_byte( unsigned char out_byte)

{

unsigned char i;

cs=0;

long_delay();

for (i=0;i<8;i++)

{

if (out_byte&0x80)

{

dat=1;

}

else

{

dat=0;

}

clk=1;

short_delay();

clk=0;

short_delay();

out_byte=out_byte*2;

}

dat=0;

}

 

unsigned char receive_byte(void)

{

unsigned char i, in_byte;

dat=1; // set to input mode

long_delay();

for (i=0;i<8;i++)

{

clk=1;

short_delay();

in_byte=in_byte*2;

if (dat)

{

in_byte=in_byte|0x01;

}

clk=0;

short_delay();

}

dat=0;

return (in_byte);

}

 

void long_delay(void)

{

unsigned char i;

for (i=0;i<0x30;i++);

}

 

void short_delay(void)

{

unsigned char i;

for (i=0;i<8;i++);

}

 

 

 

// ******* 延时n个1MS *******

// ******* 输入:n 延时个数  *******

void delay1ms(unsigned char n)

{

unsigned int i;

 

while(n --)

{

for(i = 0;i < 125;i ++);    // i ++ ,8μS 左右

}

}

 

// ******* 延时n个10MS *******

// ******* 输入:n 延时个数  *******

void delay10ms(unsigned char n)

{

unsigned int i;

 

while(n --)

{

for(i = 0;i < 1250;i ++); // i ++ ,8μS 左右

}

}

 

  void delay(void)

{

 unsigned int n;

 for(n=0;n<10000;n++)

        ;

}

 

//*** 主程序 ***

//*** 主程序 ***

void main()

{

 

TCON=0x05; //打开外部中断1,并设置为下降沿触发

IE=0x85; //开总中断和外部中断1

 

 

if(S1==0) //有键按下吗?(k1=0 ?)

{   delay();  //延时一段时间 //延时消抖

if(S1==0) //确实是有键按下,则:

{  for (j=0;j<256;)

{  

   

write7279(SEGON,dis_code[j]); // 将64个显示段逐个点亮

if (!key) // 如果有键按下

{

key_number=read7279(CMD_READ); // 读出键码

if (key_number==dis_code[j]) // 如果有键按下

   {

    write7279(SEGOFF,dis_code[j]); // 将64个显示段逐个点亮

 // delay10ms(50);

   j++;

 

}

     

 

    }    }    

while(!S1);} //等待按键放开

}

if(S2==0) //有键按下吗?(k2=0 ?)

{   delay();  //延时一段时间

if(S2==0) //确实是有键按下,则:

{for (k=0;k<256;)

{  

   

write7279(SEGON,dis_code1[k]); // 将64个显示段逐个点亮

if (!key) // 如果有键按下

{

key_number=read7279(CMD_READ); // 读出键码

if (key_number==dis_code1[k]) // 如果有键按下

   {

    write7279(SEGOFF,dis_code1[k]); // 将64个显示段逐个点亮

 // delay10ms(50);

   k++;

 

}

     

 

}        

while(!S3);} //等待按键放开

}

 }

 if(S3==0) //有键按下吗?(k1=0 ?)

{   delay();  //延时一段时间 //延时消抖

if(S3==0) //确实是有键按下,则:

{   for (j=0;j<256;j++)

{

write7279(SEGON,dis_code2[j]); // 将64个显示段逐个点亮

write7279(SEGOFF,dis_code2[j-1]); // 同时将前一个显示段关闭

// delay10ms(50);

  }  

 

while(!S1);} //等待按键放开

}

   

}

上述的一种可以按照64个LED 指示点击按键的仪器,所述的是一种可以按照64个LED灯点亮顺序点击64个按键的仪器。

附图说明****

下面结合附图和实施例对本实用新型进一步说明。

图1为本实用新型电路原理图。

 

图1中,1. 单片STC89C52RC,2.  按键控制芯片HD7279,3.串口转换芯片PL2303。

具体实施方式****

图1中,单片STC89C52RC(2)通过芯片HD7279(2)控制64个LED指示灯和64个按键。用户可以通过芯片PL2303给单片机STC89C52烧写程序。

上盖板(1)安装在侧板1(2),侧板2(3)上部,底板(4)安装在侧板1(2),侧板2(3)下部,上圆弧形连接片(5)安装在侧板1(2),侧板2(3)上部,下圆弧形连接片(6)安装在侧板1(2),侧板2(3)下部。

 

搜狗截图20240221171217.png