打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ad_imh

1. stc15    ad_1.7  9600 1t

#include   <string.h>    //9600 #include <absacc.h>#include <stdio.h> #include <intrins.h>                    // 加入此头文件后,可使用_nop_库函数#define MAIN_Fosc        11059200L    //定义主时钟 #define Main_Fosc_KHZ    (MAIN_Fosc / 1000) #include    "15W4KxxS4.h" #define Buf_Max 5    #define  uint8    unsigned char #define  uint16   unsigned int //#define  uchar    unsigned charuint8 data Rec_Buf[Buf_Max];uint8 i = 0;  uint8  xdata buf[64]; void  delay_ms(unsigned char ms) {     unsigned int i;         do         {          i = MAIN_Fosc / 13000;                while(--i)    ;   //14T per loop     }         while(--ms);} void UART_Init(void)        {     SCON = 0x50;        //8位数据,可变波特率    AUXR |= 0x40;        //定时器1时钟为Fosc,即1T    AUXR &= 0xFE;        //串口1选择定时器1为波特率发生器    TMOD &= 0x0F;        //设定定时器1为16位自动重装方式    TL1 = 0xE0;        //设定定时初值    TH1 = 0xFE;        //设定定时初值    ET1 = 0;        //禁止定时器1中断    TR1 = 1;        //启动定时器1     ES=1; } void U1SendData(uint8 ch){    SBUF = ch;                  //写数据到UART数据寄存器        while(TI == 0);             //在停止位没有发送时,TI为0即一直等待        TI = 0;                     //清除TI位(该位必须软件清零)} void U1SendString(uint8 *s){    while (*s)                    //检测字符串结束标志    {        U1SendData(*s  );         //发送当前字符                             }}  void Uart1() interrupt UART1_VECTOR using 1{    ES = 0;                       // 串口1中断关闭    if (RI)                       //串行接收到停止位的中间时刻时,该位置1  {      RI = 0;                   //清除RI位 (该位必须软件清零)            Rec_Buf[i] = SBUF;       //把串口1缓存SBUF寄存器数据依次存放到数组Rec_Buf中            i  ;                              if(i>Buf_Max)             //接收数大于定义接收数组最大个数时,覆盖接收数组之前值                {                    i = 0;                                 }              }   if (TI)                    //在停止位开始发送时,该位置1   {      TI = 0;                 //清除TI位(该位必须软件清零)   }     ES =  1;                   // 串口1中断打开}void    ADC_config(void){        ADC_CONTR|=0x80;          //开AD转换电源    delay_ms(10);           //适当延时等待AD转换供电稳定    P1ASF|=0x80;                  //选择P1.7作为模拟功能AD使用    ADC_CONTR|=0x07;        //选择P1.7作为AD转换通道输入使用    ADC_CONTR|=0x60;        //AD转换速度为90个时钟周期转换一次    ADC_CONTR&=0xEF;        //清AD转换完成标志    EADC=0;                 //禁止ADC转换中断    CLK_DIV|=0x20;          //ADC转换结果ADC_RES存高2位,ADC_RESL存低8位    ADC_CONTR|=0x08;        //启动AD转换,ADC_START=1} uint16    Get_ADC10bitResult(void)    {    uint16    AD_Dat=0;  ADC_CONTR&=0xE7;              // 将ADC_FLAG清0    //10位AD结果的高2位放ADC_RES的低2位,低8位在ADC_RESL    AD_Dat = ADC_RES;               //将ADC_RES低2位移到应在的第9位和第10位    AD_Dat <<= 8;    AD_Dat|= ADC_RESL;           //将ADC_RESL的8位移到应在的低8位    ADC_CONTR|=0x08;           //重新启动AD转换,ADC_START=1。    return    AD_Dat;    }void UART_Send_Byte(unsigned char mydata)    { ES=0; TI=0; SBUF=mydata; while(!TI); TI=0; ES=1;} void UART_Send_Str(char *s){ int i=0; while(s[i]!=0) {     UART_Send_Byte(s[i]);     i  ; } }void UART_Send_END(void){     UART_Send_Byte(0xFF);     UART_Send_Byte(0xFF);     UART_Send_Byte(0xFF);} void delayms(int count)  // /* X1ms */{        int i,j;        for(i=0;i<count;i  )                for(j=0;j<1000;j  );}void UART_Send_start(void){     delayms(10);     UART_Send_END();     delayms(10);}int  main(void){      uint16    TempPhoto,Temp;      uint8 strPhoto[6];     UART_Init();  //初始化串口,   UART_Send_start();//为确保串口HMI正常通信   //UART_Send_Str("page 0"); UART_Send_END();             ADC_config();                                 //ADC初始化            EA = 1;                                       //打开总中断        delay_ms(10);                                 //初始化后延时        while (1)    {                    memset(strPhoto, 0, sizeof(strPhoto));    //strTemp数组清零            TempPhoto = Get_ADC10bitResult();            //实时读取P1.7通道的AD转换结果   // delay_ms(5);        if(TempPhoto==Temp)                       //如果ADC检测结果没有变化,则不更新屏显示        {            ;        }        else                                      //如果ADC检测结果发生变化,则更新屏显示内容        {          Temp=TempPhoto;        strPhoto[0] = TempPhoto/100 48;             //光强度百位            strPhoto[1] = (TempPhoto0)/10 48;        //光强度十位          strPhoto[2] = (TempPhoto0) 48;        //光强度个位                      sprintf(buf,"add 1,0,%s",strPhoto );              UART_Send_Str(buf);              UART_Send_END();                                        // U1SendString("\r\n");                       //输出回车换行符,方便观察数据            }    //delay_ms(5);                                  }}
View Code
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
1月24号 修改串口头文件(视频笔记)
PIC单片机
CC2530 ADC实验1(读取片内温度并通过串口显示)
stm32f103 uart+DMA发送接收
NRF24LE1内部FLASH读写操作C语言程序
学51单片机-基于PCF8591的AD采样和DA输出【实际应用篇】
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服