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

📄 anjian.c

📁 595的应用与仿真 适合学习单片机的看哈
💻 C
字号:
#include <reg51.h>
#include <intrins.h>
#define unchar unsigned char

unsigned char code TAB[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,  
                              0x5e,0x79,0x71}; //proteus里面CC数码管是共阴的

unchar m,sz[6];

sbit  SDATA_595 = P3^6 ;       /*串行数据输入14DS*/  
sbit  SCLK_595  = P3^4;       /*移位时钟脉冲11SCH*/
sbit  RCK_595   = P3^5;      /*输出锁存器控制脉冲12STCP*/

static void  WR_595(unsigned char data num2 )
 {
   unsigned char data count1;
   
   for(count1=0;count1<=7;count1++)
   {
     if((num2&0x80)==0x80)  /*最高位为1,则向SDATA_595发送1*/
	    SDATA_595=1;        /*发出数据的最高位*/
	 else  
	    SDATA_595=0;
	 
	 num2<<=1;         /*右移位*/
	 SCLK_595=0;	   /*产生上生沿*/
	 SCLK_595=1;
    
	}  

 }
/*-------------------------------------------------------------------------------
                     打开锁存,更新74595输出子程序
---------------------------------------------------------------------------------*/
static void Out_595(void)
 {
   RCK_595=0;
   _nop_();
   _nop_();
   RCK_595=1;  /*上升沿锁存数据*/

 }

//判断键值//
unsigned char k;    //键值判断//
void delay_10ms(void)    //延时//
{
  unsigned char i,j;
  for(i=0;i>0;i--)
  for(j=248;j>0;j--);
}
void Getch()
{
  unsigned char x,y,z;
  P2=0xff;   
  P2=0x0f;   //先对P2置数,进行行扫描//
  if(P2!=0x0f)   //判断是否有键按下//
 {
   delay_10ms();    //软件延时//
   if(P2!=0x0f)  //确认是否按下//
   {
     x=P2;
     P2=0xf0;    //列扫描//
     y=P2;
     z=x^y;      //用Z取出键值//
     switch(z)   //判断键值//
     {
       case 0x77: k=0; break;   //对按键附值//
       case 0x7b: k=1; break;  
       case 0x7d: k=2; break;  
       case 0x7e: k=3; break;  
       case 0xb7: k=4; break;  
       case 0xbb: k=5; break;  
       case 0xbd: k=6; break;  
       case 0xbe: k=7; break;  
       case 0xd7: k=8; break;  
       case 0xdb: k=9; break;  
       case 0xdd: k=10;break;  
       case 0xde: k=11;break;  
       case 0xe7: k=12;break;  
       case 0xeb: k=13;break;  
       case 0xed: k=14;break;  
       case 0xee: k=15;break;  
     }
    }
   }
  }
 
 //显示//
void disp(void)
{ 
WR_595(TAB[k]);
WR_595(0x00);
 Out_595();

		}
 
void main(void)   //主程序
{  
  while(1) 
 { P2=0x00; 
   Getch(); 
   	disp();
  } 
}

⌨️ 快捷键说明

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