📄 main.c
字号:
//-----------------------------------------------------------------
// 名称: 用IIC接口控制MAX6955驱动16段数码管
//-----------------------------------------------------------------
// 说明: 本例运行时,8只16段数码滚动显示数字0~9,字母A~Z
// 本例使MAX6955工作于全解码模式,因此只需要向MAX6955输出
// 待显示字符ASCII码即可,不需要编写并发送各字符的段码.
//
//----------Proteus中单只16段数码管上下排引脚名称------------------
// NO. 1 2 3 4 5 6 7 8 9
//******************************************
// 上: A1 A2 B C D2 D1 E F 位控制
// 下: H I J G2 K I M G1 DP
//-----------------------------------------------------------------
#include <pic.h>
#include <string.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define _XTAL_FREQ 4000000UL
//子器件地址0xC0,0xC1
#define MAX6955R 0B11000001 //1 = READ
#define MAX6955W 0B11000000 //0 = WRITE
bit ack = 0;
//I2C通用操作宏定义
#define Idle() {while ((SSPCON2 & 0x1F)|(RW));}
#define Wait() {while (SSPIF == 0);SSPIF = 0;}
#define Start() {Idle(); SSPIF = 0; SEN = 1; Wait();}
#define Stop() {Idle(); SSPIF = 0; PEN = 1; Wait();}
#define RepStart() {Idle(); SSPIF = 0; RSEN = 1;Wait();}
#define WriteByte(x) {Idle(); SSPBUF = x; Wait(); ack = !ACKSTAT; }
#define EnableRecv() {Idle(); RCEN = 1; while (SSPIF == 0);}
#define AckI2C() {ACKDT = 0;ACKEN = 1;Wait();}
#define NoAckI2C() {ACKDT = 1;ACKEN = 1;Wait();}
//16段数码管滚动显示的字符串
char SEG_LED_String[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//-----------------------------------------------------------------
// 延时子程序
//-----------------------------------------------------------------
void delayX100ms(INT8U x)
{
while (x--) __delay_ms(100);
}
//-----------------------------------------------------------------
// 写MAX6955子程序
//-----------------------------------------------------------------
void MAX6955_Write(INT8U addr, INT8U dat)
{
}
//-----------------------------------------------------------------
// MAX6955初始化
//-----------------------------------------------------------------
void MAX6955_INIT()
{
}
//-----------------------------------------------------------------
// IIC初始化
//-----------------------------------------------------------------
void IIC_Init()
{
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
INT8U i,j,Len = strlen(SEG_LED_String);
IIC_Init(); //IIC初始化
MAX6955_INIT(); //MAX6955初始化设置
while (1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -