📄 main.c
字号:
#include "config.h"
#include "I2CINT.h"
#define ScanNum 0x0D //位选
#define D1 0x10 //第1位数码管的显示寄存器
#define D2 0x11 //第2位数码管的显示寄存器
#define D3 0x12 //第3位数码管的显示寄存器
#define D4 0x13 //第4位数码管的显示寄存器
#define D5 0x14 //第5位数码管的显示寄存器
#define D6 0x15 //第6位数码管的显示寄存器
#define D7 0x16 //第7位数码管的显示寄存器
#define D8 0x17 //第8位数码管的显示寄存器
#define d1 0x60 //第1位数码管的显示寄存器
#define d2 0x61 //第2位数码管的显示寄存器
#define d3 0x62 //第3位数码管的显示寄存器
#define d4 0x63 //第4位数码管的显示寄存器
#define d5 0x64 //第5位数码管的显示寄存器
#define d6 0x65 //第6位数码管的显示寄存器
#define d7 0x66 //第7位数码管的显示寄存器
#define d8 0x67 //第8位数码管的显示寄存器
#define flash_on 1 //数码管闪烁
#define flash_off 2 //数码管不闪烁
#define dp_on 1 //小数点亮
#define dp_off 0 //小数点不亮
uint8 d[]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17};
uint8 led0=0x00;
/**********************************************************************************************************
** 函数名称 :DelayNS()
** 函数功能 :长软件延时
** 入口参数 :dly 延时参数,值越大,延时越久
** 出口参数 :无
**********************************************************************************************************/
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
/*
*********************************************************************************************************
** 函数名称 :I2cInit()
** 函数功能 :I2C初始化
** 入口参数 :Fi2c I2C总线频率(最大400K)
** 出口参数 :无
*********************************************************************************************************
*/
void I2cInit(uint32 Fi2c)
{
if (Fi2c > 400000)
Fi2c = 400000;
//PINSEL0 = (PINSEL0 & 0xFFFFFF0F) | 0x50; /* 设置I2C控制口有效 */
PINSEL0 = (PINSEL0 & (~0xF0)) | 0x50; // 不影响其它管脚连接
I2SCLH = (Fpclk/Fi2c + 1) / 2; /* 设定I2C时钟 */
I2SCLL = (Fpclk/Fi2c)/2;
I2CONCLR = 0x2C;
I2CONSET = 0x40; /* 使能主I2C */
/* 设置I2C中断允许 */
VICIntSelect = 0x00000000; /* 设置所有通道为IRQ中断 */
VICVectCntl0 = (0x20 | 0x09); /* I2C通道分配到IRQ slot0,最高优先级 */
VICVectAddr0 = (int32)IRQ_I2C; /* 设置I2C中断向量 */
VICIntEnable = (1 << 9); /* 使能I2C中断 */
}
void Write_led(uint8 dxuan,uint8 change_led)
{
led0=change_led;
I2C_WriteNByte(0x70,1, dxuan,&led0, 1);
DelayNS(10);
}
/**********清除数码管的某位*******************/
void clr( uint8 wei)//清除数码管第"wei"位的显示
{
Write_led(wei,0);
}
/**********全部熄灭数码管*******************/
void clr_all(void)
{
uint8 i;
for(i=0;i<9;i++)
clr(d[i]);
}
/**********使能前NUM位数码管亮*******************/
void scan_num(uint8 num)//扫描位数函数,前num位数码管亮
{
if(num>=7) num=7;
Write_led(ScanNum,num);
}
/***********************************************************************
函数功能 译码 控制闪烁 控制dp
dx 位选(d1,d2,d3.d4.d5.d6.d7.d8代表第1到8位数码管)
data 数据 (1.2.3.4.5.6.7.8.9直接显示)
flash 控制闪烁与否 (1(或flash_on) 闪烁 0(或flash_off)不闪烁
dp 控制是否亮小数点 (1(或dp_on)亮 0(或dp_off)不亮
***********************************************************************/
void down_data(uint8 dx,uint8 data,uint8 dp,uint8 flash)
{
uint8 dd;
switch(data)
{
case 0: {dd=0x00|(dp<<7)|(flash<<6);break;}
case 1: {dd=0x01|(dp<<7)|(flash<<6);break;}
case 2: {dd=0x02|(dp<<7)|(flash<<6);break;}
case 3: {dd=0x03|(dp<<7)|(flash<<6);break;}
case 4: {dd=0x04|(dp<<7)|(flash<<6);break;}
case 5: {dd=0x05|(dp<<7)|(flash<<6);break;}
case 6: {dd=0x06|(dp<<7)|(flash<<6);break;}
case 7: {dd=0x07|(dp<<7)|(flash<<6);break;}
case 8: {dd=0x08|(dp<<7)|(flash<<6);break;}
case 9: {dd=0x09|(dp<<7)|(flash<<6);break;}
default : break;
}
Write_led(0x07,dx);
Write_led(0x08,dd);
}
void flash_control(uint8 fc)
{
Write_led(0x0c,fc);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -