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

📄 4位动态164.c

📁 74138,74164数码管动态显示,这是我学习用的。有PROteus的仿真
💻 C
字号:
 /*--------------------------------------------------------------------------------
  ★★ 标准串口和模拟串口4位164动态数码管显示程序 ★★
  1.CPU :89C51    晶振2MHz 
 
---------------------------------------------------------------------------------*/
#include <reg51.h> 
#include <intrins.h>
#define LEN_OF_DIS 7//当数码管位数变化修改此处即可
unsigned char code dispcode[]={0x84,0xee,0x45,0x46, 0x2e,0x16,0x14,0x8e, 

                                 0x04,0x06,0xff,0xfe,0xfd,0xfb,0xf7};	 //共阴极字型码
unsigned char disbuf[LEN_OF_DIS]={0,0,0,0,0,0,0};
unsigned char ms=0;
sbit DAT=P1^3;
sbit CLK=P1^4;
sbit ASD=P1^2;
sbit bSD=P1^1;
sbit cSD=P1^0;
sbit dSD=P1^5;

//模拟串口//

/* void send(unsigned char da)
  {
	 unsigned char k;
	  for(k=0;k<8;k++)
       {
         DAT=da&0x01; //从低位开始逐一移出(与线路有关,这是段A对应QG),164的时序是从D0逐步到D7.移完8次后整体再向下(bit)
         da>>=1;
         CLK=0;
         CLK=1;
          }
     }
/********************************/	   
 void  send(unsigned char a1)
{
    unsigned char i;
	for(i=0;i<8;i++)
	{
	 if(_crol_(a1,i)&0x80)
	 		DAT =1;
			
		else  DAT=0;
		CLK	=0;
		CLK =1;
		}
	}
	 //显示函数,先分离再显示//
 void display(unsigned int tmp,unsigned int tmp1,unsigned int tmp2)
 {	 
    disbuf[3]=tmp1%10;	  
    
    disbuf[2]=tmp1/10;
    
    disbuf[1]=tmp%10;
    disbuf[0]=tmp/10; 
	disbuf[4]=tmp2/10;		  
    //
	//SBUF=dispcode[disbuf[ms%LEN_OF_DIS]];  //标准串口
	  
	  //P0=_cror_(0xfe,1);
	  //P0=0x7f;
	  //delay(1);	   //决定刷新频率
	  //P0=P0|0xff;	 //传完后关闭当前显示位(不然显示不全),同时不影响没有用到的端口
 }


 void Init()
 {
  TMOD=0x01;
 // SCON=0x00;	 //串口工作方式1
 // ES=1;  
 // IP=0x10; 
  TH0=0xf8;	
  TL0=0x50;
  TR0=1;
  ET0=1;
  EA=1;
 }
   //主函数//
 void main()
 { Init();	
 
 //display(11,32);
 while(1){; }
 }

void Timer0(void)interrupt 3  using 1
{   ASD=1;
    bSD=1;
    cSD=1;
    dSD=1;
  TH0=0xf8;
  TL0=0x50;
  ASD=1;
    bSD=1;
    cSD=1;
    dSD=1;
  display(11,32,10);
  //SBUF=dispcode[disbuf[ms%LEN_OF_DIS]];
  send(dispcode[disbuf[ms]]);  //模拟串口
  switch(ms)
  {
  case 0:
            ASD=0;
			bSD=0;
 			cSD=0;
 			dSD=0;
			break;
   case 1:
            ASD=1;
			bSD=0;
 			cSD=0;
 			dSD=0;
			break;
   case 2:
            ASD=0;
			bSD=1;
 			cSD=0;
 			dSD=0;
			break;
   case 3:
            ASD=1;
			bSD=1;
 			cSD=0;
 			dSD=0;
			break;
   case 4:
            ASD=0;
			bSD=0;
 			cSD=1;
 			dSD=0;
		
			break;
	case 5:
            ASD=1;
			bSD=0;
 			cSD=1;
 			dSD=0;
		
			break;
	
		}
  // P0&=(ms|0xf0);//当用P0口的口线作时钟和数据时用此指令。
   ms++;
 if(ms==LEN_OF_DIS)
 {
 ms=0;
 }
 //BitSelect=_crol_(BitSelect,1);
 ////
}
   //串口中断//
 /*void uart() interrupt 4
   {      
    TI=0;
   } */
	   	

⌨️ 快捷键说明

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