📄 led.c
字号:
#include <mega128.h>
#include <delay.h>
#include "Led.h"
//+++++++++++++++++++++++++++++++++++++++++++++++++
///////////////////////////0~9
flash unsigned char LED_CODE[23]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x40, 0x79, 0x50, 0x77, 0x71, 0x7c, 0x5c, 0x39, 0x38, 0x6d, 0x3e, 0x5b,0X80};
//0~9-, E, R, A, F, b, o, C, L, S, V, Z, .
//最后一个小数点
void LED_Init(void)
{
DDRA=0XFF;
DDRC=0XF0;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
/*
LED DISPLAY
using 74LS164
number =0~9999
whichPoint=4,3,2,1,从左到右
0 表示不显示小数点
*/
void LED_dispNumber(unsigned int number,unsigned char whichPoint)
{
unsigned char i,head_zero_cnt;
unsigned char A=0,B=0,C=0,D=0;
unsigned int number_back;
number_back=number;
while(number>=1000)
{
A++;
number=number-1000;
}
while(number>=100)
{
B++;
number=number-100;
}
while(number>=10)
{
C++;
number=number-10;
}
D=number;
Clear_LED();
LED_CLK=0;
Set_LED();
LED_SEL1=1;
LED_SEL2=1;
LED_SEL3=1;
LED_SEL4=1;
for(i=0;i<8;i++)
{
LED_CLK=0;
if(whichPoint==1) LED_SDATA=((LED_CODE[D]|0x80)<<i)&0x80;
else LED_SDATA=(LED_CODE[D]<<i)&0x80;
delay_us(5);
LED_CLK=1;
delay_us(5);
}
for(i=0;i<8;i++)
{
LED_CLK=0;
if(whichPoint==2) LED_SDATA=((LED_CODE[C]|0x80)<<i)&0x80;
else LED_SDATA=(LED_CODE[C]<<i)&0x80;
delay_us(5);
LED_CLK=1;
delay_us(5);
}
for(i=0;i<8;i++)
{
LED_CLK=0;
if(whichPoint==3) LED_SDATA=((LED_CODE[B]|0x80)<<i)&0x80;
else LED_SDATA=(LED_CODE[B]<<i)&0x80;
delay_us(5);
LED_CLK=1;
delay_us(5);
}
for(i=0;i<8;i++)
{
LED_CLK=0;
if(whichPoint==4) LED_SDATA=((LED_CODE[A]|0x80)<<i)&0x80;
else LED_SDATA=(LED_CODE[A]<<i)&0x80;
delay_us(5);
LED_CLK=1;
delay_us(5);
}
//以下清除前面的零显示
LED_SEL1=0;
LED_SEL2=0;
LED_SEL3=0;
LED_SEL4=0;
if(number_back>=1000) head_zero_cnt=0;
else if(number_back>=100) head_zero_cnt=1;
else if(number_back>=10) head_zero_cnt=2;
else if(number_back>0) head_zero_cnt=3;
else head_zero_cnt=4;
switch(whichPoint)
{
case 0:
if(head_zero_cnt==1) LED_SEL1=1;
else if(head_zero_cnt==2)
{
LED_SEL1=1;
LED_SEL2=1;
}
else if(head_zero_cnt==3||head_zero_cnt==4)
{
LED_SEL1=1;
LED_SEL2=1;
LED_SEL3=1;
}
break;
case 2:
if(head_zero_cnt==1)
{
LED_SEL1=1;
}
else if(head_zero_cnt>1)
{
LED_SEL1=1;
LED_SEL2=1;
}
break;
case 3:
if(head_zero_cnt>0) LED_SEL1=1;
break;
default:
break;
}
delay_us(10);
}
//LED_dispDash()
// 显示- ---
//用于调零时候的显示
void LED_dispDash(void)
{
unsigned char i,j;
Clear_LED();
LED_CLK=0;
Set_LED();
for(j=0;j<4;j++)
{
LED_PORT_SEL=LED_PORT_SEL|0xF0;
for (i=0;i<8;i++)
{
LED_CLK=0;
LED_SDATA=(LED_CODE[10]<<i)&0x80;
delay_us(5);
LED_CLK=1;
delay_us(5);
}
LED_PORT_SEL=LED_PORT_SEL&(~(0x80>>j));
delay_ms(500);
}
LED_PORT_SEL=LED_PORT_SEL|0xF0;
/*
LED_SEL1=0;
LED_SEL2=0;
LED_SEL3=0;
LED_SEL4=0; */
}
//POS 从左到右0~3
void LED_dispOneDash(unsigned char pos)
{
unsigned char i,j;
Clear_LED();
LED_CLK=0;
Set_LED();
for(j=0;j<pos+1;j++)
{
LED_PORT_SEL=LED_PORT_SEL|0xF0;
for (i=0;i<8;i++)
{
LED_CLK=0;
LED_SDATA=(LED_CODE[10]<<i)&0x80;
delay_us(1);
LED_CLK=1;
delay_us(1);
}
LED_PORT_SEL=LED_PORT_SEL&(~(0x80>>j));
}
//LED_PORT_SEL=LED_PORT_SEL|0xF0;
}
void LED_dispAllDash(void)
{
unsigned char i,j;
Clear_LED();
LED_CLK=0;
Set_LED();
for(j=0;j<4;j++)
{
//LED_PORT_SEL=LED_PORT_SEL|0xF0;
for (i=0;i<8;i++)
{
LED_CLK=0;
LED_SDATA=(LED_CODE[10]<<i)&0x80;
delay_us(5);
LED_CLK=1;
delay_us(5);
}
LED_PORT_SEL=LED_PORT_SEL&(~(0x80>>j));
//delay_ms(500);
}
/*
LED_SEL1=0;
LED_SEL2=0;
LED_SEL3=0;
LED_SEL4=0; */
}
//************************************
void Light_LED(unsigned char whichLED)
{
unsigned char A,B,C;
A=(whichLED&0x01)?(1<<5):0;
B=(whichLED&0x02)?(1<<4):0;
C=(whichLED&0x04)?(1<<6):0;
G1_138=1;
PORT_138=(0X80|A|B|C);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -