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

📄 4x5text.c

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 C
字号:
/*****************************************************************
File:4x5text.c
Author:xiaorunyi
Edition:V1.0
Email:qq315626168@126.com
www.ednchina.com/blog/xiaorunyi
功能:74ls164数码管显示4x5健值
******************************************************************/
#include<reg52.h>       //51芯片管脚定义头文件
#include<intrins.h>     //内部包含延时函数 _nop_();

#define uint unsigned int
#define uchar unsigned char

void kbscan();             //4*5按键扫描
void delay(int count);
unsigned char kbp;        //存储键值

sbit data_164=P1^7;
sbit clk_164 =P1^5;
sbit ale_164 =P1^6;

sbit bell=P1^4;

uchar code display[]={ 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"16
                0x38,  //"L"17
                0x37,  //"n"18
                0x3E,  //"u"19
                0x73,  //"P"20
				0X5C,  //"o"21
                0x40,  //"-"22
                0x00,  //熄灭23
                0x00  //自定义
				};

uchar dis1,dis2,dis3,dis4,dis5,dis6,dis7;

/******************************************************************
延时t毫秒
11.0592MHz时钟,延时约1ms
*******************************************************************/
void delayms(uint t)
{
 uchar k;
 while(t--)
  {
    for(k=0;k<125;k++)
     {;}
  }
}

/******************************************************************
写数据子函数
*******************************************************************/
void wr_bits(uchar num)
{
  uchar i;

  for(i=0;i<8;i++)
   {
     if(num&0x80)  //从数据的高位开始送
       data_164 =0;
     else
       data_164 =1;

     num<<=1;      //向左移动一位,先送高位

     clk_164 =0;   //下降沿将数据写入164
     _nop_();
     clk_164 =1;
    }   
}

/******************************************************************
数据转换子函数
*******************************************************************/
void conver()
{
  dis7=dis6;
  dis6=dis5;
  dis5=dis4;
  dis4=dis3;
  dis3=dis2;
  dis2=dis1;  
  dis1=kbp;
}
/*************************************************************                                                          
蜂鸣器响一声                                              
*************************************************************/
void  delay1(uchar x)
{ uchar j;
    while((x--)!=0)
    { for(j=0;j<125;j++)
         {;}
    }
}
void beep()
{
  unsigned char i;
  for (i=0;i<10;i++)
   {
   delay(4);
   bell=!bell;       	//BEEP取反
   } 
   bell=1;           	//关闭蜂鸣器
   //delay1(250);       	//延时     
}

main()
{
  clk_164 =0;
kbp=0xff;dis2=0;dis3=0;dis4=0;dis5=0;dis6=0;dis1=0;
  ale_164 =1;
  delayms(1);
  ale_164 =0;
  //wr_bits(0x00);       //关闭数码管显示
  delayms(40);
   while(1)
   {
     kbscan();
	if(kbp!=0xff)
         {beep();
         conver();
         wr_bits(display[dis7]);
		 wr_bits(display[dis6]);
		 wr_bits(display[dis5]);
		 wr_bits(display[dis4]);
		 wr_bits(display[dis3]);
         wr_bits(display[dis2]); 
         wr_bits(display[dis1]);
		 kbp=0xff;
        //delayms(1000);
		}
   }// end while
}//end maim

void kbscan()    
{
    unsigned char scanrow[]={0xfb,0xf7,0xef,0xdf,0x7f}; 
    unsigned char scancol[]={0xfe,0xfd,0xfb,0xf7}; 
    uint row,col,kbtemp;          //计数器定义
	kbp=0xff;
	for(row=0;row < 5;row++)
	{
     P3=scanrow[row];               //0值输出 
     kbtemp=P1&0x0f;				//取P1口值
	 if(kbtemp !=0x0f)       
	 {
       delay(7);              		//延时去斗
       if(kbtemp !=(P1&0x0f));    	//再次判断是否有健按下
	   {
         for(col=0;col<4;col++)
		 {
           if(kbtemp==(scancol[col]&0x0f))
           kbp=row*4+col;
		 } // for col detect
		 delay(7);              	//等待延时
		 while((P1&0x0f)!=0x0f);    //等待按键释放
		 while((P1&0x0f)!=0x0f);    //等待按键释放
 	   } // end if keyin 
     } // end if keyin 
	} // for row
} // end kbscan

void delay(uint count)
{
   uint i,j;
   for(i=0;i<count;i++)
       for(j=0;j<122;j++);
} 

⌨️ 快捷键说明

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