第一范文网 - 专业文章范例文档资料分享平台

压力传感器仿真程序

来源:用户分享 时间:2025/6/8 6:05:28 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

#include #include #include #include

#define uchar unsigned char #define uint unsigned int

#define BUSY 0x80 //常量定义 #define DATAPORT P0

//ADC0832的引脚

sbit ADCS =P3^5; //ADC0832 chip seclect sbit ADDI =P3^7; //ADC0832 k in sbit ADDO =P3^7; //ADC0832 k out

sbit ADCLK =P3^6; //ADC0832 clock signal

sbit LCM_RS=P2^0; sbit LCM_RW=P2^1; sbit LCM_EN=P2^2;

uchar ad_data; //采样值存储

sbit Alarm_led_red =P1^5; //超过压力表量程最大值红色led报警定义

sbit Alarm_led_green=P1^6; //低于压力表量程最小值绿色led报警定义

//adc采样值存储单元

char press_data; //标度变换存储单元 unsigned char ad_alarm; //报警值存储单元 unsigned char press_bai=0; //显示值百位 unsigned char press_shi=0; //显示值十位 unsigned char press_ge=0; //显示值个位 unsigned char press_dot=0; //显示值十分位

uchar code str0[]={\ . kpa %uchar code str1[]={\

void delay(uint); void lcd_wait(void);

void delay_LCM(uint); //LCD延时子程序

void initLCM( void); //LCD初始化子程序

void lcd_wait(void); //LCD

检测忙子程序

void WriteCommandLCM(uchar WCLCM,uchar BusyC); //写指令到ICM子函数

void WriteDataLCM(uchar WDLCM); //写数据到LCM子函数

void DisplayOneChar(uchar X,uchar Y,uchar DData); //显示指定坐标的一个字符子函数

void DisplayListChar(uchar X,uchar Y,uchar code *DData); //显示指定坐标的一串字符子函数

void display(void); 显示子函数

uchar Adc0832(unsigned char channel); void alarm(void); void data_pro(void);

/**********main funcation************/

void main(void) {

delay(500); //系统延时500ms启动

// ad_data=0; //采样值存储单元初始化为0 initLCM( );

WriteCommandLCM(0x01,1); //清显示屏 DisplayListChar(0,0,str0); DisplayListChar(0,1,str1); while(1) { ad_data =Adc0832(0); //采样值存储单元初始化为0 alarm(); data_pro(); display(); } }

/*********延时K*1ms,12.000mhz**********/

//系统

void delay(uint k) {

uint i,j;

for(i=0;i

for(j=0;j<60;j++) {;} } }

/**********写指令到ICM子函数************/

void WriteCommandLCM(uchar WCLCM,uchar BusyC) {

if(BusyC)lcd_wait(); DATAPORT=WCLCM;

LCM_RS=0; // 选中指令寄存器 LCM_RW=0; // 写模式 LCM_EN=1; _nop_(); _nop_(); _nop_(); LCM_EN=0; }

/**********写数据到LCM子函数************/

void WriteDataLCM(uchar WDLCM) {

lcd_wait( ); //检测忙信号 DATAPORT=WDLCM;

LCM_RS=1; // 选中数据寄存器 LCM_RW=0; // 写模式 LCM_EN=1; _nop_(); _nop_(); _nop_(); LCM_EN=0; }

/***********lcm内部等待函数*************/

void lcd_wait(void)

{

DATAPORT=0xff; //读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色 LCM_EN=1; LCM_RS=0; LCM_RW=1; _nop_(); _nop_(); _nop_();

while(DATAPORT&BUSY) { LCM_EN=0; _nop_(); _nop_(); LCM_EN=1; _nop_(); _nop_(); }

LCM_EN=0; }

/**********LCM初始化子函数***********/

void initLCM( ) { DATAPORT=0; delay(15); WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号 delay(5);

WriteCommandLCM(0x38,0); delay(5);

WriteCommandLCM(0x38,0); delay(5);

WriteCommandLCM(0x38,1); //8bit数据传送,2行显示,5*7字型,检测忙信号 WriteCommandLCM(0x08,1); //关闭显示,检测忙信号 WriteCommandLCM(0x01,1); //清屏,检测忙信号

WriteCommandLCM(0x06,1); //显示光标右移设置,检测忙信号

WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号 }

/****显示指定坐标的一个字符子函数****/

void DisplayOneChar(uchar X,uchar Y,uchar DData)

{

Y&=1; X&=15;

if(Y)X|=0x40; //若y为1(显示第二行),地址码+0X40 X|=0x80; //指令码为地址码+0X80 WriteCommandLCM(X,0); WriteDataLCM(DData); }

/*******显示指定坐标的一串字符子函数*****/

void DisplayListChar(uchar X,uchar Y,uchar code *DData) {

uchar ListLength=0; Y&=0x01; X&=0x0f; while(X<16) {

DisplayOneChar(X,Y,DData[ListLength]); ListLength++; X++; } }

/*****************系统显示子函数*****************/

void display(void) {

WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号 DisplayListChar(0,0,str0); DisplayListChar(0,1,str1); DisplayOneChar(7,0,press_bai+0x30); DisplayOneChar(8,0,press_shi+0x30); DisplayOneChar(9,0,press_ge +0x30); DisplayOneChar(11,0,press_dot+0x30); delay(1000); //稳定显示 }

/************ 读ADC0832函数 ************/

搜索更多关于: 压力传感器仿真程序 的文档
压力传感器仿真程序.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6rnq12rmkd7u3cm9b9nu86wqu5roq70039z_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top