基于C8051F020车辆散热系统参数检测仪的设计(10)

2020-02-21 22:47

沈阳工业大学本科生毕业设计(论文)

可显示数字

}

//同时进行一个四舍五入操作。 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


基于C8051F020车辆散热系统参数检测仪的设计(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:铁砂掌训练之痛

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: