⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7281.c

📁 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 + -