📄 ch451ls0811.h
字号:
#ifndef __CH451LS0811_h__
#define __CH451LS0811_h__
// write your header here
#define CH451LS_CMD_LENGTH 12//指令字长度
#define DGT_NUM 10
#define LED_NUM 4
#ifndef _DELAY
#define _DELAY
int delay_i;
#define D 0x7fff
#define DELAY for(delay_i=0;delay_i<D;delay_i++) *P_Watchdog_Clear=1;
#endif
int MASK12[]={0x0001,0x0002,0x0004,0x0008,
0x0010,0x0020,0x0040,0x0080,
0x0100,0x0200,0x0400,0x0800};
int DIGIT[]={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f};
void wrt_to_CH451LS(int cmd){//将指令cmd的低12位通过IOB口的低8位串行写入CH451LS
int data;
int i=0;
data=0;
*P_IOB_Data=data;
for(i=0;i<CH451LS_CMD_LENGTH;i++){
data=0x0002;//保证LOAD始终为高电平
*P_IOB_Data=data;
if(cmd&MASK12[i])
data|=0x0004;//输入有用数据
data|=0x0008;//置DCLK为高电平
*P_IOB_Data=data;
}
data=0x0000;//主要是置LOAD为低电平,其他位无所谓
*P_IOB_Data=data;
data=0x0002;//主要是置LOAD为高电平,其他位无所谓
*P_IOB_Data=data;
data=0x0000;//主要是置LOAD为低电平,其他位无所谓
*P_IOB_Data=data;
}
void init_CH451LS(){
int p;
p=0x0201;//系统复位
wrt_to_CH451LS(p);
p=0x0401;//仅使能显示驱动
wrt_to_CH451LS(p);
p=0x0540;//非BCD、4个显示管、占空比16/16
wrt_to_CH451LS(p);
//p=0x0601;//使第0个显示管闪烁
//wrt_to_CH451LS(p);
}
void init_61_with_A_out(){//A口初始化为输出口
int p=0xffff;
*P_IOB_Dir=p;
*P_IOB_Attrib=p;
}
void wrt_digit(int d,int num){//向CH451LS的d位写入数字num,(d从0开始编号)
int cmd=0x0008;
if(d>=0&&d<LED_NUM&&num>=0&&num<DGT_NUM){
cmd|=d;
cmd<<=8;
cmd|=DIGIT[num];
wrt_to_CH451LS(cmd);
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -