51单片机MPX4115压力传感器+ADC0832仿真课设程序

2019-11-16来源: 51hei关键字:51单片机  MPX4115  压力传感器  ADC0832

单片机源程序如下:

#include

#include

#include

#include

#define uchar unsigned char

#define uint unsigned  int

#define ulong unsigned long


#define BUSY  0x80                  //常量定义            

#define DATAPORT P0


sbit Alarm_led_red =P1^6;          //超过压力表量程最大值红灯报警

sbit Alarm_led_green=P1^7;         //低于压力表量程最小值路灯报警


sbit LCM_RS=P2^0;

sbit LCM_RW=P2^1;

sbit LCM_EN=P2^2;

                    

sbit k1=P2^3;  

sbit k2=P2^4;  

sbit k3=P2^5;  

sbit k4=P2^6;  


sbit ADCS =P3^5;  //ADC0832 chip seclect

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

sbit ADDI =P3^7;  //ADC0832 k in

sbit ADDO =P3^7;  //ADC0832 k out






uchar ad_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[]={"Press:   .   kpa. "};

uchar code str1[]={"ZKB:   00  %   "}; 

uchar ZKB[2];

uchar HighRH = 0;

uchar HighRL = 0;

uchar LowRH = 0;

uchar LowRL = 0;

unsigned int a;

uchar rate;  

sbit PWMOUT = P1^0;

uchar step, rec_data,flag;

uchar Adc0832(unsigned char channel);  

void delay(uint);                         

void lcd_wait(void);                      //检测忙子程序

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

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

void WriteCommandLCM(uchar WCLCM,uchar BusyC);           //写指令到LCM子程序      

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);                                       //系统显示子函数

void ConfigPWM(uchar rate);

void alarm(void);

void data_pro(void);

void ConfigPWM(uchar dc);

void key_setPWM(void);

uchar duty_cycle(uchar ad_data);

void display_zkb(void);

void zkb_pro(void);

void chuankou_init();


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

void main(void)

          

        

    delay(50);              

    initLCM( );      

                chuankou_init();

    WriteCommandLCM(0x01,1);           //清屏显示

    DisplayListChar(0,0,str0);

    DisplayListChar(0,1,str1);

                

                delay(10);

                PWMOUT=1;

                EA = 1;

                ConfigPWM(rate); 

                while(1)

    { 

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

                        alarm();

                        data_pro();

                        zkb_pro();

                        display();

                        display_zkb();

                        a=duty_cycle(ad_data);

                        ConfigPWM(a);

                        key_setPWM();

                        if(a!=rate)

                        {

                        ConfigPWM(rate);

                        } 

                        

                                if(RI==1)//串口

                {

                        RI=0;

                        rec_data=SBUF;

                        step=rec_data*2;

                        SBUF=rec_data;

                }

                

                }

}


void TIME_INIT()

{

TMOD|=0X02;

IT0=1;

IT1=1;

TR1=1;

EX1=1;

EX0=1;

ET0=1;

TR0=1;

EA=1;

}

void chuankou_init()

SCON|=0X50;

TMOD|=0X20;

PCON|=0X80;

TH1=0XFA;

TL1=0XFA;

TR1=1;


SM0=0;

SM1=1;

REN=1;


EA=1;

ES=1;

}


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

void delay(uint x)

{

    uchar i;

         while(x--)

         {

                 for(i = 0;i < 120;i++)

                 {;}

         }

}   

/**********写数据到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数据传送,两行显示,5*7字型,检测忙信号

    WriteCommandLCM(0x08,1);            //关闭显示,检测忙信号

    WriteCommandLCM(0x01,1);            //清屏,检测忙信号

WriteCommandLCM(0x06,1);

[1] [2] [3]
关键字:51单片机  MPX4115  压力传感器  ADC0832 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic480215.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:12864液晶菜单界面小系统
下一篇:检测0~20MA电流传感器报警控制程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

使用C语言进行单片机电子时钟课程设计
介绍:(1)P0口的第一功能是作为一般I/O口使用,第二功能是在CPU访问外部存储器时,分时提供低8位地址和8位双向数据。(2)P1口是8位准双向I/O口,51子系列中P1只能用作一般I/O口,52子系列中P1.0和P1.1引脚还具有第二功能。(3)P2口是8位准双向I/O口,第二功能是在CPU访问外部存储器时,作为高8位地址总线,输出高8位地址。(4)P3口是8位准双向I/O口,其第一功能是用作一般I/O口,第二功能是作为中断信号和外部数据存储器的读写控制信号。(5)RES,复位信号高电平有效。2.Keil的简单介绍Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。Keil提供了包括
发表于 2019-12-06
使用C语言进行单片机电子时钟课程设计
51单片机旋转led(POV-LED)显示系统设计报告与代码
led发光二极管组成。传感器部分:传感器部分采用霍尔传感器。系统设计2.1主控板的选择方案一:方案二:采用ARM为系统的控制核心,优点是功能强大,集成度度高,提高了运行稳定性,系统的处理速度高,适合作为大规模的系统的控制核心。采用51单片机作为系统的控制核心。用其控LED,足以实现预期的性能指标,操控。51单片机运算功能强,软件编程灵活、自由度大,功耗低、体积小、技术成熟,价格低廉。由于考虑到不宜太高,那么对系统处理信息的速度要求也就不会太高。综合成本考虑,我们选择采用方案二。2.2 供电方式选择LED旋转采用电机旋转的方式,以下是两种电机方案的对比:方案一:方案二:采用单电源供电,通过单电源同时给主控板和减速直流电机进行供电,该方案的优点是,减少
发表于 2019-12-06
51单片机旋转led(POV-LED)显示系统设计报告与代码
51单片机串口通信程序,支持自定义协议
单片机源程序如下:#include"reg52.h" /*51串口通信by沸腾的冰块/不拼不活*/typedef unsigned int u16;typedef unsigned char u8;#define Data_SIZE 7     //存入数组RevBuf数据长度==uart_Data_SIZE-2#define uart_Data_SIZE 5//协议实际长度(一个汉字占两位)u8 RevBuf[Data_SIZE];       //数据接收缓冲区u8 indata[uart_Data_SIZE];  //防数据
发表于 2019-12-06
2864串口接线方式与实例程序
百度了好长时间都没有找到带字库的12864使用串口如何接线,后来参阅了一下12864的产品说明,终于摸索出来了,本人是刚入门单片机,还有好多的不懂的,我把接线的方式还有实例程序分享出来,只要对大家有一丁点的帮助就满足了。首先看引脚定义   RS=CS;   R/W=SID;  E=CLK; FSB高电平为并行接口,用并口时接高电平,FSB接低电平时为串口,高低电平可以直接接VCC或者GND也可以用软件去控制,实现并口和串口的切换。RET不接线也能使用,用串口时除了DB0--DB7就不再使用外,其他的接口按手册上说明使用。下面是测试代码,也是参阅从51黑电子论坛
发表于 2019-12-06
2864串口接线方式与实例程序
51单片机控制DHT11在1602上显示温湿度的程序
单片机源程序如下:#include <reg52.h> #define uint unsigned int #define uchar unsigned char typedef bit BOOL; sbit io = P2^0; sbit rs = P2^6;  sbit rw = P2^5; sbit ep = P2^7; uchar data_byte; uchar RH,RL,TH,TL;/********延时模块***********/ void delay(uchar ms) { 
发表于 2019-12-06
51单片机多路DS18B20测温显示并读取序列号
/*********************************************功 能:读取序列号并匹配序列号,并读温度值多功能试验板显示多路温度采集正常显示2个DS18B20温度正常读取DS18B20序列号单片机:STC12C5A60S2晶 振:11.0592M作 者:苏义江改编自网络时 间:2016-8-25************************************************/#include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint
发表于 2019-12-06
51单片机多路DS18B20测温显示并读取序列号
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved