STC12C5A60S2+12864+MQ-135显示.rar

  • 漠宇
    了解作者
  • C/C++
    开发工具
  • 29KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 22
    下载次数
  • 2017-11-02 13:36
    上传日期
利用单片机STC12C5A60S2通过12864显示MQ135的数值
STC12C5A60S2+12864+MQ-135显示.rar
  • STC12C5A60S2+12864+MQ-135显示
  • Objects
  • adc.hex
    2.4KB
  • adc.build_log.htm
    907B
  • adc.lnp
    71B
  • STARTUP.obj
    819B
  • 123456.obj
    11.7KB
  • Listings
  • 123456.lst
    9.1KB
  • STARTUP.lst
    13.8KB
  • adc.m51
    11.2KB
  • 自编.lst
    537B
  • adc.uvopt
    5.2KB
  • adc.uvgui.chen
    136.1KB
  • STARTUP.A51
    6.2KB
  • adc.uvproj
    13.5KB
  • 自编.c
    4.3KB
内容介绍
/****STC12C5A60S2+MQ-135+12864显示程序****/ /****MQ-135 AO引脚连接STC12C5A60S2的P3.0**/ #include "STC12C5A60S2.H" #include "intrins.h" /***********12864引脚定义***************/ sbit RS=P1^0; //12864引脚定义 数据口为P0 sbit RW=P1^1; sbit EN=P2^5; sbit PSB=P1^2; sbit RET=P2^3; unsigned char ge, shi, bai, qian; unsigned char table[]="0123456789"; typedef unsigned char BYTE; typedef unsigned int WORD; //全局变量 uint类型 意思是可接受 16位二进制 typedef unsigned long adc32; adc32 ADC_DATA16; void delay(WORD n); void delay_ms (unsigned int a); void InitADC(); void DelayUs2x(unsigned char t) { while(--t); } void DelayMs(unsigned char t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } } /**********************12864判忙*****************************/ void check_busy() { RS=0; RW=1; EN=1; while((P0&0x80)==0x80); EN=0; } /**********************12864写指令*****************************/ void write_com(unsigned char com) { check_busy(); RS=0; RW=0; EN=1; P0=com; DelayUs2x(250); EN=0; DelayUs2x(250); } /**********************12864写数据*****************************/ void write_data(unsigned char dat) { check_busy(); RS=1; RW=0; EN=1; P0=dat; DelayUs2x(250); EN=0; DelayUs2x(250); } /**********************12864初始化函数*****************************/ void init() { DelayMs(40); //大于40MS的延时程序 PSB=1; //设置为8BIT并口工作模式 DelayMs(1); //延时 RET=0; //复位 DelayMs(1); //延时 RET=1; //复位置高 DelayMs(200); write_com(0x30); //选择基本指令集 DelayUs2x(250); //延时大于100us write_com(0x30); //选择8bit数据流 DelayUs2x(200); //延时大于37us write_com(0x0c); //开显示(无游标、不反白) DelayUs2x(250); //延时大于100us write_com(0x01); //清除显示,并且设定地址指针为00H DelayMs(200); //延时大于10ms write_com(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动 DelayUs2x(250); //延时大于100us } /**********************清屏*****************************/ void clrscreen() { write_com(0x01); DelayMs(15); } /************************ //AUXR1= AUXR1 | ADC_ADRJ1; //选择高二位存放在ADC_RES 低八位存放在 ADC_RESL /*-------------------------------- ADC 取值 ------------------------------*/ unsigned int GetADCResult(unsigned ch) {unsigned int V; ADC_CONTR = ADC_POWER | ADC_SPEEDLL |ch| ADC_START; _nop_(); //Must wait before inquiry _nop_(); _nop_(); _nop_(); while (!(ADC_CONTR & ADC_FLAG)); //Wait complete flag ADC_CONTR &=~ADC_FLAG; //Close ADC V=ADC_RES*256+ADC_RESL;//如果采用 “选择高二位存放在ADC_RES 低八位存放在 则 V=ADC_RES*4+ADC_RESL; ADC_RES=0; ADC_RESL=0; return V; //Return ADC result } /*****************************/ /*---------------------------- 初始化ADC ----------------------------*/ void InitADC() { P1ASF = 0x80; //设置P1.7口为AD口 ADC_RES = 0; ADC_RESL = 0; //清除结果寄存器 ADC_CONTR = ADC_POWER | ADC_SPEEDLL; AUXR1 = 0X04; //将高两位存放在寄存器ADC_RES,低八位存放在寄存器ADC_RESL中 // 或操作BCH=1000 00000|0000 0000= 1000 00000 打开电源 设置为90个时钟周期…… delay(2); //ADC上电并延时 } /*--------------延时------------------*/ void delay_ms (unsigned int a) { unsigned int i; while( a-- != 0){ for(i = 0; i < 600; i++); } } /*--------------延时------------------*/ void delay(WORD n) { WORD x; while (n--) { x = 5000; while (x--); } } /*---------------------------- 读取ADC结果 ----------------------------*/ /***********主函数*****/ void main() { init(); //液晶初始化 clrscreen(); InitADC(); while(1) { ADC_DATA16=GetADCResult(7); ge = ADC_DATA16 % 10; shi = ADC_DATA16 / 10 % 10; bai = ADC_DATA16 / 100 % 10; qian = ADC_DATA16 / 1000; write_com(0x80); //显示20 write_data(table[qian]); write_data(table[bai]); write_data(table[shi]); write_data(table[ge]); write_data('V'); delay_ms(10); } }
评论
    相关推荐
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路
    • VHDL 的实例程序,共44个.rar
      经典VHDL 的实例程序,共44个!要下载的尽快
    • USBtoRS232Driver.rar
      USB转串口驱动程序,可以用在笔记本电脑上,方便的通过串口给单片机下载程序!
    • 模糊控制程序.rar
      模糊PID控制程序的源码,是作业,有讲解,
    • 串口编程源代码.rar
      这是本人最近几年所编写的串行通讯的代码集,可以供大家参考学习。
    • DELTA_PLC.rar
      台达PLC Modbus协议通信dll com控件
    • hongwaigooog.rar
      单片机红外遥控最全的资料,包含很多当前电视遥控专用芯片的解码方式,C语言和汇编语言编写的解码范例程序,看完了你就会了!
    • MF500绝密.rar
      非接触式IC卡开发板源程序,包括原理图/PCB图;源程序在KEIL环境下编译,打开压缩包后直接点击PRJ文件,即可编译使用。 这是个保密文件,做Mifare one卡开发人基本上都用过到这个源代码。
    • 20078251299410.rar
      C51实用程序(45个) I/O、定时器、中断、看门狗、计数器、软件AD、VB串口、93c06驱动、24c02系列驱动、7219、20045、软件陷阱、串口中断、码值转换、AVR通讯、IIC、DS1302、DS1820、SPI、1602、12232、12864、T6963、1330、PC键、键盘输入法、智能化、飞机游戏、贪吃蛇、多级菜单实例等
    • mcudesign.rar
      单片机设计,毕业设计 16×16点阵(滚动显示)论文+程序 cdma通信系统中的接入信道部分进行仿真与分析 LED显示屏动态显示和远程监控的实现 MCS-51单片机温度控制系统 USB接口设计 毕业设计(论文)OFDM通信系统基带数据 仓库温湿度的监测系统 单片机串行通信发射机 单片机课程设计__电子密码锁报告 单片机控制交通灯 电动智能小车(完整论文 电气工程系06届毕业设计开题报告 电信运营商收入保障系统设计与实现 电子设计大赛点阵电子显示屏(A题 电子时钟 火灾自动报警系统设计 基于GSM短信模块的家庭防盗报警系统 基于GSM模块的车载防盗系统设计 TC35i 资料 基于网络的虚拟仪器测试系统 门控自动照明电路 全遥控数字音量控制的D类功率放大器 数控直流稳压电源完整论文 数字密码锁设计 数字抢答器(数字电路) 数字时钟 水箱单片机控制系统 同步电机模型的MATLAB仿真 温度监控系统的设计 用单片机控制直流电机 用单片机实现温度远程显示 智能家用电热水器控制器 智能型充电器电源和显示的设计 自动加料机控制系统