📄 led.c
字号:
/******************************************************
文件:led.c
描述:7段数码管显示
硬接口:IOB0--CLK,IOB1--DIN,IOB2--LD(1)/CS(0)
软接口:初始化上述3口为输出,初始化SIO,调用Init7219(),调用DispOneDig(num,dig)
修改信息:2005-07-26 nevsaynev Initial Version
*******************************************************/
#include "led.h"
#include "Init_System.h"
/*=========================================
函数:void Init_7219(void)
描述:初始化7219
说明:请确保调用处包含头文件 macro.h, led.h
===========================================*/
typedef unsigned int uint;
typedef unsigned char uchar;
void Init_7219(void)
{
CLRPORTB(2); //是否支持BCD译码
SendData(DEC_ADDR);
SendData(DEC_NONE);
SETPORTB(2);
Delay_nlx(5);
CLRPORTB(2); //选择亮度,共16级
SendData(INTSTY_ADDR);
SendData(INTSTY(10));
SETPORTB(2);
Delay_nlx(5);
CLRPORTB(2); //扫描的个数,最好设为8
SendData(SCAN_ADDR);
SendData(SCAN_NUM(8));
SETPORTB(2);
Delay_nlx(5);
CLRPORTB(2); //是否关闭显示
SendData(SHUTDN_ADDR);
SendData(SHUTDN_NONE);
SETPORTB(2);
Delay_nlx(5);
CLRPORTB(2); //进行测试
SendData(TEST_ADDR);
SendData(TEST_ALL);
SETPORTB(2);
Delay_nlx(3000);
CLRPORTB(2); //延时后关闭测试
SendData(TEST_ADDR);
SendData(TEST_NONE);
SETPORTB(2);
Blank_LED();
}
/*===============================================
函数:void SendData(uchar)
描述:SIO向外发送数据
输入:要传送的数据
返回:无
=================================================*/
void SendData(uchar data)
{
*SIO_start = 1;
*SIO_Data = data;
while( (*SIO_start) & 0x80)
*Wd_Clr=1;
}
/*===============================================
函数:void DispOneDig(uchar,uchar)
描述:在设定的数码管上显示数字
输入:显示的数字,所在的位(自DIG0开始编号)
返回:无
================================================*/
void DispOneDig(uchar num,uchar dig)
{ // 0 1 2 3 4 5 6 7 8 9
static uchar Seg_Code[20]={ 0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,
0xfe,0xb0,0xed,0xf9,0xb3,0xdb,0xdf,0xf0,0xff,0xfb};
uchar* p=Seg_Code; // 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.
CLRPORTB(2);
SendData(SELECT_DIG(dig));
SendData(*( p + num));
SETPORTB(2);
}
/*===============================================
函数:void ShineDig(uchar)
描述:数码管某一位闪烁,用于报警等功能
输入:闪烁的位
返回:无
=================================================*/
/*void ShineDig(uchar dig)
{
DispOneDig();
Delay_nlx(3000);
BlankOneDig(dig);
}
*/
/*================================================
函数:void ShineAll(uchar)
描述:闪烁并使闪烁状态保持一定时间
输入:需闪烁的时间(以秒为单位)
返回:无
=================================================*/
/*void ShineAll(uchar time)
{
while(time--)
{
CLRPORTB(2);
SendData(SHUTDN_ADDR);
SendData(SHUTDN_ALL);
SETPORTB(2);
Delay_nlx1s();
CLRPORTB(2);
SendData(SHUTDN_ADDR);
SendData(SHUTDN_NONE);
SETPORTB(2);
}
}
*/
/*=================================================
函数:void BlankOneDig(uchar)
描述:关闭某一位的显示
输入:需关闭的位
返回:无
==================================================*/
void BlankOneDig(uchar dig)
{
CLRPORTB(2);
SendData(SELECT_DIG(dig));
SendData(0);
SETPORTB(2);
}
/******************************************************
**Clear all LED
******************************************************/
/**************************************************
描述:分成两段显示,左边为实际值,右边为设定值
***************************************************/
void DispValue(int value,uchar attri)
{
uchar first,ii;
uchar ge,shi = 0,bai = 0;
{
if(attri == SET)
first = 7;
else if(attri == ACT)
first = 3;
}
while((value - 100)>=0)
{
bai++;
value -= 100;
*Wd_Clr=1;
}
while((value - 10)>=0)
{
shi++;
value -= 10;
*Wd_Clr=1;
}
ge=value;
if( !bai)
{
BlankOneDig(first-2);
if( !shi)
BlankOneDig(first-1);
DispOneDig(shi,first-1);
DispOneDig(ge,first);
}
else
{
DispOneDig(bai,first-2);
DispOneDig(shi,first-1);
DispOneDig(ge,first);
}
}
void Blank_LED()
{
int i;
for(i=0;i<=8;i++)
{
BlankOneDig(i);
}
}
void Delay_nlx(uint time)
{
uint ii;
for(ii=time<<4;ii>0;ii--)
{
*Wd_Clr=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -