沈阳工业大学本科生毕业设计(论文)
可显示数字
}
//同时进行一个四舍五入操作。 return(temp);
源代码五:CH451数码显示、键盘扫描部分
#include \
sbit ch451_dclk=P0^2; //串行数据时钟上升延激活
sbit ch451_din=P3^4; // 串行数据输出,接CH451的数据输人 sbit ch451_load=P0^0; //串行命令加载,上升延激活 sbit ch451_dout=P0^1; //键值数据输入,接ch451数据输出
/***********************CH451宏定义************************/ #define CH451_RESET 0x0201 //复位
#define CH451_LEFTMOV 0x0300 //设置移动方式-左移 #define CH451_LEFTCYC 0x0301 //设置移动方式-左循 #define CH451_RIGHTMOV 0x0302 //设置移动方式-右移 #define CH451_RIGHTCYC 0x0303 //设置移动方式-右循 #define CH451_SYSOFF 0x0400 //关显示、键盘、看门狗 #define CH451_SYSON1 0x0401 //开显示 #define CH451_SYSON2 0x0403 //开显示、键盘
#define CH451_SYSON3 0x0407 //开显示、键盘、看门狗功能 #define CH451_DSP 0x0500 //设置默认显示方式 #define CH451_BCD 0x0580 //设置BCD译码方式 #define CH451_TWINKLE 0x0600 //设置闪烁控制——正常显示 #define CH451_DIG0 0x0800 //LED位0显示 #define CH451_DIG1 0x0900 //LED位1显示 #define CH451_DIG2 0x0a00 //LED位2显示 #define CH451_DIG3 0x0b00 //LED位3显示 #define CH451_DIG4 0x0c00 //LED位4显示 #define CH451_DIG5 0x0d00 //LED位5显示 /*************************************************************/ unsigned int display[8]={0x0a00,0x0900,0x0b00,0x0800, 0x0c00,0x0d00,0x0e00,0x0f00};
unsigned char BCD[10]={0xbe,0x24,0xea,0xe6, //0,1,2,3, 0x74,0xd6,0xde,0xa4, //4,5,6,7, 0xfe,0xf6 //8,9
41
沈阳工业大学本科生毕业设计(论文)
};
unsigned char ch451_key=0; // 存放键盘中断中读取的键值
extern char flag;
//锁存标志位
//定义压力下限变量 //定义温度下限变量
//CH451初始化程序 //获取键值程序 //键盘控制程序 //显示温度程序 //显示压力程序
//关闭压力、温度显示程序
extern int p-HIGH; //定义压力上限变量 extern int p-LOW; extern int t-LOW;
void CH451_Init(void); void GetKeyNum(void); void KeyControl(void); void Display_Temp(int tt); void Display_Pres(int tt); void CloseDisplay(void);
void ch451_write(unsigned int command); //CH451写程序 extern int t-HIGH; //定义温度上限变量
/***********************************************************************/ //定义一无符号整型变量存储12字节的命令字// void ch451_write(unsigned int command) { 前
}
void CH451_Init(void) {
ch451_din=0; //先低后高,选择4线输入 ch451_din=1;
ch451_write(CH451_RESET); //CH451复位 }
ch451_load=1; //上升沿加载数据
ch451_din=command&1; ch451_dclk=0; command>>=1;
ch451_dclk=1; //上升沿有效 unsigned char i;
ch451_load=0; //命令开始 for(i=0;i<12;i++)
{
//送入12位数据,低位在
42
沈阳工业大学本科生毕业设计(论文)
重要
}
void Display_Temp(int tt) { 点
}
void Display_Pres(int tt) { {
ch451_write(display[0]+0); //显示温度个位 ch451_write(display[1]+0); //显示温度十位 ch451_write(display[2]+0); //显示温度百位 ch451_write(display[3]+0); //显示压力个位; ch451_write(display[4]+0); //显示压力十位 A2=(tt00)/100; //百位 A1=(tt0)/10; //十位 A0=tt; //个位
ch451_write(display[3]+BCD[A0]); //显示压力个位 ch451_write(display[4]+BCD[A1]); //显示压力十位 ch451_write(display[5]+BCD[A2]); //显示压力百位 }
unsigned char A0,A1,A2; //记录压力各位数的变量 ch451_write(display[2]+BCD[A2]); //显示温度十位 A2=(tt00)/100; //百位
A1=(tt0)/10; //十位——这么处理的目的是显示小数点,因为A1实A0=tt; //个位
ch451_write(display[0]+BCD[A0]); //显示温度小数位
ch451_write(display[1]+BCD[A1]+1); //显示温度个位 此处加一为了加入小数unsigned char A0,A1,A2; //记录温度各位数的变量
ch451_write(CH451_TWINKLE); //设置闪烁控制——正常显示 ch451_write(CH451_SYSON2); //开显示、键盘
ch451_write(CH451_DSP); //设置BCD不译码方式 由于板画错了 此设置很
际是温度的个位
void CloseDisplay(void)
43
沈阳工业大学本科生毕业设计(论文)
}
void GetKeyNum(void) {
unsigned char i; //定义循环变量
unsigned char command,keycode; //定义控制字寄存器,和中间变量定时器 ch451_write(display[5]+0); //显示压力百位
command=0x07; ch451_load=0;
for(i=0;i<4;i++) { ch451_din=command&1; ch451_dclk=0;
command>>=1; ch451_dclk=1;
}
ch451_load=1; keycode=0;
for(i=0;i<7;i++) { keycode<<=1; keycode|=ch451_dout; ch451_dclk=0; ch451_dclk=1;
}
ch451_key=keycode;
}
void KeyControl(void) { if(!ch451_dout) { GetKeyNum(); switch(ch451_key) { case 0x40:
{
temperature= 1;
}break;
//读取键值命令的高4位0111B
//命令开始
//低位在前,高位在后
//右移一位
//产生时钟上升沿锁通知CH451输入位数据
//产生加载上升沿通知CH451处理命令数据//清除keycode
//数据左移一位,高位在前,低位在后
//从高到低读入451的数据
//产生时钟下升沿通知CH451输出下一位
//保存上次的键值
//按键1显示温度测量值
44
沈阳工业大学本科生毕业设计(论文)
{
值
}
case 0x41:
} break;
Display_Temp(t-HIGH);
//测量值锁定后,按键2显示上限温度
case 0x43: {
if( temperature == 1)
{ if( temperature == 1) {
值
}break; }
}
}
case 0x49: {if(pressure==1 ){ }break; default:break;
case 0x48: {
pressure=1 //按键4显示压力测量值 }break; case 0x4b: {if(pressure==1 )
Display_Pres(p-HIGH); //测量值锁定后,按键5显示上限压力
Display_Temp(t-LOW);
//测量值锁定后,按键3显示下限温度值
}; break;
Display_Pres(p-LOW); //测量值锁定后,按键6显示下限压力值
45