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

📄 74hc164键盘显示.c

📁 74hc164键盘显示 红外控制DS1302 超级IO扫描 12864+遥控解码 1602+定时器 LCD1602+自定义图形
💻 C
字号:
#include<reg5122.h>

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴  

sbit a0=ACC^0;   //定义ACC的位,利用ACC操作速度最快
sbit a1=ACC^1;
sbit a2=ACC^2;
sbit a3=ACC^3;
sbit a4=ACC^4;
sbit a5=ACC^5;
sbit a6=ACC^6;
sbit a7=ACC^7;
                            
sbit CLK1=P2^0;
sbit DAT1=P2^1;
sbit CLK2=P3^6;
sbit DAT2=P3^7;
sbit xuan2=P2^2;
sbit xuan1=P3^4;
unsigned char k=0;
void delay(int t)
{
  unsigned char i;
  for(;t>0;t--)
  for(i=0;i<125;i++);
}

void sendchar(unsigned char dd) 
{
 ACC=dd;
 DAT1=a0;CLK1=0;CLK1=1;   //上升沿脉冲触发移位
 DAT1=a1;CLK1=0;CLK1=1;
 DAT1=a2;CLK1=0;CLK1=1;
 DAT1=a3;CLK1=0;CLK1=1;
 DAT1=a4;CLK1=0;CLK1=1;
 DAT1=a5;CLK1=0;CLK1=1;
 DAT1=a6;CLK1=0;CLK1=1;
 DAT1=a7;CLK1=0;CLK1=1;
}

unsigned char keyscan(void)
{
   static keynumber=0 ; 
   unsigned char k; 
     for(k=0;k<8;k++)  //扫描前164清零
     {
	    DAT1=0; CLK1=0;CLK1=1;	    	     
     }
     if(xuan1==0)
     {
	   delay(1); 
	   if(xuan1==0);
	   {
	     DAT1=1;
		 for(k=0;k<8;k++)
		 {
		   CLK1=0;
		   CLK1=1;
           
		   if(xuan1==1)
		   {
		     keynumber=k; break;
		   }
		   DAT1=0;		 
		 }
	   }
	 }
	
	 if(xuan2==0)
     {
	   delay(1);
	   if(xuan2==0);
	   {
	     DAT1=1;
		 for(k=0;k<8;k++)
		 { 
		   CLK1=0;
		   CLK1=1;
		   
		   if(xuan2==1)
		   {
		     keynumber=k+8; break;
		   }
		   DAT1=0;		   
		 }
	   }
     }	 
	 return keynumber;
}

void display(long int shu,unsigned char wei)
{
  unsigned char i,s;
  DAT2=0;
  s=shu%10;
  for(i=0;i<wei;i++)
  {
    CLK2=0;
	CLK2=1;
	DAT2=1;    
	sendchar(table[s]);	
	shu=shu/10;
	s=shu%10;
	delay(2); 
    P3_0=0; 
    P3_0=1;	
  } 
  for(i=wei;i<9;i++)  //位清零
  {
    CLK2=0;
	CLK2=1;
  } 
}

void main(void)
{ 
  unsigned char keynumber=0,i=0;    
  while(1)
  {  
    if(i==10)
     {	   
  	   i=0;
       keynumber= keyscan();
	 }
	 i++;
	 display(keynumber,3);    	    
  }
}


/*
void sendchar(unsigned char kdate)
{
  unsigned char i,date;
  i=8;
  do
  {
   date=kdate&1;
   kdate=kdate>>1;
   DAT1=date;
   CLK1=0;       //上升沿脉冲触发移位
   CLK1=1;
  }while(--i!=0);
}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -