📄 mpx4115.txt
字号:
1. #include<REG51.H>
2. #include<INTRINS.H>
3. #include <ABSACC.H>
4. #include <MATH.H>
5.
6. #define uchar unsigned char
7. #define uint unsigned int
8. #define BUSY 0x80 //常量定义
9. #define DATAPORT P0
10. #define ADC_adress XBYTE[0X7FF8] //AD的地址
11.
12.
13. sbit LCM_RS=P2^0;
14. sbit LCM_RW=P2^1;
15. sbit LCM_EN=P2^2;
16. sbit ad_busy=P3^2;
17. uchar ad_data; //采样值存储
18. sbit Alarm_led_red =P1^5; //超过压力表量程最大值红色led报警定义
19. sbit Alarm_led_green=P1^6; //低于压力表量程最小值绿色led报警定义
20. unsigned char ad_data; //adc采样值存储单元
21. char press_data; //标度变换存储单元
22. unsigned char ad_alarm; //报警值存储单元
23. unsigned char press_bai=0; //显示值百位
24. unsigned char press_shi=0; //显示值十位
25. unsigned char press_ge=0; //显示值个位
26. unsigned char press_dot=0; //显示值十分位
27.
28. uchar code str0[]={" press: . kpa "};
29. uchar code str1[]={" yi wei dian zi "};
30.
31. void delay(uint);
32. void lcd_wait(void);
33. void delay_LCM(uint); //LCD延时子程序
34. void initLCM( void); //LCD初始化子程序
35. void lcd_wait(void); //LCD检测忙子程序
36. void WriteCommandLCM(uchar WCLCM,uchar BusyC); //写指令到ICM子函数
37. void WriteDataLCM(uchar WDLCM); //写数据到LCM子函数
38. void DisplayOneChar(uchar X,uchar Y,uchar DData); //显示指定坐标的一个字符子函数
39. void DisplayListChar(uchar X,uchar Y,uchar code *DData); //显示指定坐标的一串字符子函数
40. void display(void); //系统显示子函数
41. void adc0809(void);
42. void alarm(void);
43. void data_pro(void);
44.
45.
46. /**********main funcation************/
47.
48. void main(void)
49. {
50. delay(500); //系统延时500ms启动
51. ad_data=0; //采样值存储单元初始化为0
52. initLCM( );
53.
54. WriteCommandLCM(0x01,1); //清显示屏
55. DisplayListChar(0,0,str0);
56. DisplayListChar(0,1,str1);
57.
58. while(1)
59. {
60.
61. adc0809();
62. data_pro();
63. alarm();
64. display();
65.
66. }
67. }
68.
69.
70. /*********延时K*1ms,12.000mhz**********/
71.
72. void delay(uint k)
73. {
74. uint i,j;
75. for(i=0;i<K;I++) if(ad_data { alarm(void) void *****************报警子函数******************* } 取压力值十分位 press_dot="((temp%1000)%100)%10;" 取压力值个位 press_ge="((temp%1000)%100)/10;" 取压力值十位 press_shi="(temp%1000)/100;" 取压力值百位 press_bai="temp/1000;" 放大10倍,便于后面的计算 temp="(int)(press*10);" 测试时补偿值为10 press="((10.0/23.0)*vary)+10;" y="(115-15)/(243-13)*X+15kpa" vary="ad_data;" int 当压力值介于15kpa到115kpa之间时,遵循线性变换 if(14<ad_data<243) press; float temp; unsigned data_pro(void) ***********************数据处理子函数************************ ad_data变量中 将采集数据送到 ad_data="ADC_adress;" 延时5ms delay(1); 启动adc转换 ADC_adress="0;" adc0809(void) ******************adc0809采样子函数****************** 稳定显示 delay(1000); DisplayOneChar(11,0,press_dot+0x30); +0x30); DisplayOneChar(9,0,press_ge DisplayOneChar(8,0,press_shi+0x30); DisplayOneChar(7,0,press_bai+0x30); DisplayListChar(0,1,str1); DisplayListChar(0,0,str0); 显示屏打开,光标不显示,不闪烁,检测忙信号 WriteCommandLCM(0x0c,1); display(void) *****************系统显示子函数***************** X++; ListLength++; DisplayOneChar(X,Y,DData[ListLength]); while(X<16) X&="15;" Y&="1;" ListLength="0;" uchar *DData) code Y,uchar X,uchar DisplayListChar(uchar *******显示指定坐标的一串字符子函数***** WriteDataLCM(DData); WriteCommandLCM(X,0); 指令码为地址码+0X80 X|="0x80;" 若y为1(显示第二行),地址码+0X40 if(Y)X|="0x40;" DData) DisplayOneChar(uchar ****显示指定坐标的一个字符子函数**** 显示光标右移设置,检测忙信号 WriteCommandLCM(0x06,1); 清屏,检测忙信号 WriteCommandLCM(0x01,1); 关闭显示,检测忙信号 WriteCommandLCM(0x08,1); 8bit数据传送,2行显示,5*7字型,检测忙信号 WriteCommandLCM(0x38,1); delay(5); WriteCommandLCM(0x38,0); 三次显示模式设置,不检测忙信号 delay(15); DATAPORT="WCLCM;" ) initLCM( **********LCM初始化子函数*********** LCM_EN="1;" _nop_(); while(DATAPORT&BUSY) LCM_RW="0;" LCM_RS="0;" 读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色 lcd_wait(void) ***********lcm内部等待函数************* 写模式 选中数据寄存器 检测忙信号 ); lcd_wait( WDLCM) WriteDataLCM(uchar **********写数据到LCM子函数************ 选中指令寄存器 if(BusyC)lcd_wait(); BusyC) WCLCM,uchar WriteCommandLCM(uchar **********写指令到ICM子函数************ {;} for(j="0;j<60;j++)">=244) //如果当前压力值大于115kpa,
76.
77. { Alarm_led_red=0; } //则启动red led报警
78.
79. else
80. { Alarm_led_red=1; } //关闭red led 报警
81.
82.
83. if(ad_data<=13) //如果当前压力值小于15kpa
84.
85. { Alarm_led_green=0; } //则启动green led报警
86.
87. else
88. { Alarm_led_green=1; } //关闭green led 报警
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -