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

📄 display.c

📁 用两片AVR(ATmega16)单片机
💻 C
字号:
#include "display.h"

//===================MAX7219的核心函数,接收单片机的数据===================== 
void SEND(unsigned char add,unsigned char dat)//发送2个字节的子函数,第一个字节为地址,第二个字节为操作数  
{  
unsigned char ads,j,x;  
unsigned int i;  
i=0;  
MAX7219_LOAD_0;//load=0  
   while(i<16)  
   {
//   if(add==1||add==5) dat=dat|0x80; //小数点问题解决
   if (i<8){ads=add;}   
   else {ads=dat;}   
      for(j=8;j>=1;j--)  
      {  
      x=ads&0x80;  
         if (x==0){MAX7219_DIN_0;}  
         else {MAX7219_DIN_1;}  
            ads=ads<<1;  
      MAX7219_CLK_1;//clk=1  
         MAX7219_CLK_0;//clk=0  
      }  
   i=i+8;  
   }  
MAX7219_LOAD_1;//load=1  
}  
//===================================== 

//==============SEG亮度================ 
void SEG_LIGHT(unsigned light) 
{ 
SEND(0x0a,light&0x0f); 
} 
//=================================== 

//==============SEG开================ 
void SEG_OPEN(void) 
{ 
SEND(0x0c,0x01); 
} 
//=================================== 

//==============SEG关================ 
void SEG_CLOSE(void) 
{ 
SEND(0x0c,0x00); 
} 
//=================================== 

//==============SEG清屏==============
void SEG_CLEAR(unsigned char part) 
{ 
switch(part) 
        { 
        case 0://左 
                { 
                SEND(0x01,0x0f);  
                SEND(0x02,0x0f);  
                SEND(0x03,0x0f);  
                SEND(0x04,0x0f); 
                }break; 
        case 1://右 
                { 
                SEND(0x05,0x0f);  
                SEND(0x06,0x0f);  
                SEND(0x07,0x0f);  
                SEND(0x08,0x0f); 
                }break; 
        default://全部 
                { 
                SEND(0x01,0x0f);  
                SEND(0x02,0x0f);  
                SEND(0x03,0x0f);  
                SEND(0x04,0x0f); 
                SEND(0x05,0x0f);  
                SEND(0x06,0x0f);  
                SEND(0x07,0x0f);  
                SEND(0x08,0x0f); 
                }break; 
        } 
} 

//==============SEG初始化============= 
void SEG_INIT(void) 
{ 
MAX7219_OUT_DDR|=(1<<MAX7219_CLK_PORT)|(1<<MAX7219_DIN_PORT)|(1<<MAX7219_LOAD_PORT); 
MAX7219_OUT_PORT|=(1<<MAX7219_CLK_PORT)|(1<<MAX7219_DIN_PORT)|(1<<MAX7219_LOAD_PORT); 
SEND(0x0c,0x01); 
SEND(0x0b,0x07);  
SEND(0x0a,0x05);  
SEND(0x09,0xff);  
SEG_CLEAR(3); 
} 


//=============SEG左四显示数字============== 
void SEG_L(unsigned int number) 
{ 
unsigned char i=4; 
SEND(0x01,0x0f); //先清除左四位,左四位黑屏 
SEND(0x02,0x0f);  
SEND(0x03,0x0f);  
SEND(0x04,0x0f); 

if(number>9999)//要显示的数值超过4位,则显示4个H 
        { 
        SEND(0x01,0x0c);  
        SEND(0x02,0x0c);  
        SEND(0x03,0x0c);  
        SEND(0x04,0x0c); 
        } 
else//小于四位可以显示 
        { 
/*		for(i=4;i>0;i--)
		 {
		  SEND(i,number%10);
		  number=(number-number%10)/10; 
		 }		*/
        do 
                { 
                SEND(i,number%10); 
                number=(number-number%10)/10; 
                i--; 
                }while(number>=1); 
        } 
} 
//===================================== 

//=============SEG右四显示数字============== 
void SEG_R(unsigned int number) 
{ 
unsigned char i=8; 

SEND(0x05,0x0f); //先清除右四位,右四位黑屏 
SEND(0x06,0x0f);  
SEND(0x07,0x0f);  
SEND(0x08,0x0f); 

if(number>9999)//要显示的数值超过4位,则显示4个H 
        { 
        SEND(0x05,0x0c);  
        SEND(0x06,0x0c);  
        SEND(0x07,0x0c);  
        SEND(0x08,0x0c); 
        } 
else//小于四位可以显示 
        {
/*			for(i=8;i>4;i--)
		 {
		  SEND(i,number%10);
		  number=(number-number%10)/10; 
		 }  */ 
	
        do 
                { 
                SEND(i,number%10); 
                number=(number-number%10)/10; 
				i--;
                }while(number>=1);  
        } 
} 
//=================================== 

⌨️ 快捷键说明

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