?? display.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 + -