📄 ch452.c
字号:
#include "iom48.h"
#include "inavr.h"
#include "CH452.h"
//顶行LED字模表
__flash char LED_Tab[] = { // index
SEG_A0 + SEG_B0 + SEG_C0 + SEG_D0 + SEG_E0 + SEG_F0, // Displays "0" : 0
SEG_B0 + SEG_C0, // Displays "1" : 1
SEG_A0 + SEG_B0 + SEG_D0 + SEG_E0 + SEG_G0, // Displays "2" : 2
SEG_A0 + SEG_B0 + SEG_C0 + SEG_D0 + SEG_G0, // Displays "3" : 3
SEG_B0 + SEG_C0 + SEG_F0 + SEG_G0, // Displays "4" : 4
SEG_A0 + SEG_C0 + SEG_D0 + SEG_F0 + SEG_G0, // Displays "5" : 5
SEG_A0 + SEG_C0 + SEG_D0 + SEG_E0 + SEG_F0 + SEG_G0, // Displays "6" : 6
SEG_A0 + SEG_B0 + SEG_C0, // Displays "7" : 7
SEG_A0 + SEG_B0 + SEG_C0 + SEG_D0 + SEG_E0 + SEG_F0 + SEG_G0, // Displays "8" : 8
SEG_A0 + SEG_B0 + SEG_C0 + SEG_D0 + SEG_F0 + SEG_G0, // Displays "9" : 9
SEG_A0 + SEG_B0 + SEG_C0 + SEG_E0 + SEG_F0 + SEG_G0, // Displays "A" : 10
SEG_C0 + SEG_D0 + SEG_E0 + SEG_F0 + SEG_G0, // Displays "b" : 11
SEG_D0 + SEG_E0 + SEG_G0, // Displays "c" : 12
SEG_B0 + SEG_C0 + SEG_D0 + SEG_E0 + SEG_G0, // Displays 'd' : 13
SEG_A0 + SEG_D0 + SEG_E0 + SEG_F0 + SEG_G0, // Displays 'E' : 14
SEG_A0 + SEG_E0 + SEG_F0 + SEG_G0, // Displays 'F' : 15
SEG_B0 + SEG_C0 + SEG_E0 + SEG_F0 + SEG_G0, // Displays "H" : 16
SEG_D0 + SEG_E0 + SEG_F0, // Displays "L" : 17
SEG_A0 + SEG_B0 + SEG_E0 + SEG_F0 + SEG_G0, // Displays "P" : 18
SEG_G0, // Displays '-' : 19
SEG_D0 + SEG_E0 + SEG_F0 + SEG_G0, // Displays 't' : 20
SEG_A0 + SEG_B0 + SEG_F0 + SEG_G0, // Displays ' ' : 21
SEG_C0 + SEG_D0 + SEG_E0 + SEG_G0, // Displays 'o' : 22
SEG_B0 + SEG_C0, // Displays 'I' : 23
SEG_C0 + SEG_E0 + SEG_G0, // Displays 'n' : 24
SEG_A0 + SEG_C0 + SEG_D0 + SEG_F0 + SEG_G0, // Displays 'S' : 25
0x00, // Displays Blank : 26
SEG_A0 + SEG_D0 + SEG_E0 + SEG_F0, // Displays "C" : 27
SEG_G0 + SEG_E0, // Displays "r" : 28
SEG_B0 + SEG_C0 + SEG_D0 + SEG_E0 + SEG_F0, // Displays "U" : 29
SEG_B0 + SEG_C0 + SEG_D0 + SEG_F0 + SEG_G0, // Displays "y": 30
SEG_A0 + SEG_B0 + SEG_C0 + SEG_E0 + SEG_F0 // Displays "N" : 31
};
void CH452_WR(unsigned char cmd1 ,unsigned char Param,unsigned char num )
{
unsigned char i;
unsigned char cmd;
if(num == 0)
{
cmd = cmd1 | 0x00 ;
}
else if(num == 1)
{
cmd = cmd1 | 0x20;
}
SCL_HIGH
SDA_HIGH
SDA_LOW
__delay_cycles(10);
SCL_LOW //起始信号
for(i=0; i<8; i++)//发送命令
{
if(cmd & 0x80 )
{
SDA_HIGH
}
else
{
SDA_LOW
}
SCL_HIGH
__delay_cycles(16);
cmd <<=1;
SCL_LOW
__delay_cycles(5);
}
SDA_HIGH
SCL_HIGH
__delay_cycles(16);
SCL_LOW //输出1
for(i=0; i<8; i++)//发送参数
{
if(Param & 0x80)
{
SDA_HIGH
}
else
{
SDA_LOW
}
SCL_HIGH
__delay_cycles(16);
Param <<=1;
SCL_LOW
__delay_cycles(5);
}
SCL_HIGH //结束
SDA_HIGH
}
void CH452_init(void)
{
CH452_WR(CMD_DIS_SET ,0x00,0 ); //0x0000 0000 不译码,扫描极限为8
CH452_WR(CMD_SYS_SET ,0x03,0 ); //0x0000 0011 低电平中断,低速,DIG低电平有效,键盘扫描使能,允许显示驱动
CH452_WR(CMD_DIS_SET ,0x00,1 ); //0x0000 0000 不译码,扫描极限为8
CH452_WR(CMD_SYS_SET ,0x03,1 ); //0x0000 0011 低电平中断,低速,DIG低电平有效,键盘扫描使能,允许显示驱动
CH452_WR(CMD_LOAD_DATA ,0x00,1 ); //加载数据0
CH452_WR(CMD_LOAD_DATA ,0x00,0 ); //加载数据0
CH452_WR(CMD_LOAD_DATA|(0x01<<1), 0x00,0 ); //加载数据1
CH452_WR(CMD_LOAD_DATA|(0x02<<1), 0x00,1 ); //加载数据2
CH452_WR(CMD_LOAD_DATA|(0x03<<1), 0x00,0 ); //加载数据3
CH452_WR(CMD_LOAD_DATA|(0x04<<1), 0x00,1 ); //加载数据4
CH452_WR(CMD_LOAD_DATA|(0x05<<1), 0x00,0 ); //加载数据5
CH452_WR(CMD_LOAD_DATA|(0x06<<1), 0x00,1 ); //加载数据6
CH452_WR(CMD_LOAD_DATA|(0x07<<1), 0x00,0 ); //加载数据7
EIMSK |=(1<<1);
}
unsigned char CH452_RD(unsigned char cmd )
{
unsigned char i,ReData=0;
cmd |=0x01;
SCL_HIGH
SDA_HIGH
SDA_LOW
__delay_cycles(10);
SCL_LOW //起始信号
for(i=0; i<8; i++)//发送命令
{
if(cmd & 0x80)
{
SDA_HIGH
}
else
{
SDA_LOW
}
SCL_HIGH
__delay_cycles(16);
cmd <<=1;
SCL_LOW
__delay_cycles(5);
}
SDA_HIGH
SCL_HIGH
__delay_cycles(16);
SCL_LOW //输出1
SDA_IN
for(i=0; i<8; i++)//发送参数
{
ReData <<=1;
__delay_cycles(15);
SCL_HIGH
__delay_cycles(7);
if(PINC & 0x10)
{
ReData |=0x01;
}
else
{
ReData &=0xFE;
}
__delay_cycles(7);
SCL_LOW
}
__delay_cycles(5);
SCL_HIGH //结束
SDA_HIGH
return ReData;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -