1.

#include   <string.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
uint8 data Rec_Buf[Buf_Max];
uint8 i = ; #define S2_S 0x00
#define S2RI 0x01
#define S2TI 0x02
#define S3RI 0x01
#define S3TI 0x02
#define S4RI 0x01
#define S4TI 0x02 uint8 j = ;
uint8 m = ;
uint8 n = ;
uint8 td=;
volatile bit Flag=FALSE; uint8 uart1temp;
void delay_ms(unsigned char ms)
{
unsigned int i;
do
{
i = MAIN_Fosc / ;
while(--i) ; //14T per loop
}
while(--ms);
} void UartInit(void)
{
P_SW1|=0x80; //串口1在P1.6,P1.7
P_SW1&=0xBF;
SCON = 0x50;
S2CON = 0x50; //8位数据,可变波特率
S3CON = 0x10; //8位数据,可变波特率
S3CON &= 0x30; //串口3选择定时器2为波特率发生器
S4CON = 0x10; //8位数据,可变波特率
S4CON &= 0x30; //串口4选择定时器2为波特率发生器 AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
T2L = 0xE8; //设定定时初值
T2H = 0xFF; //设定定时初值
AUXR |= 0x10; //启动定时器2 } void U1SendData(uint8 ch)
{
SBUF = ch; //写数据到UART数据寄存器
while(TI == ); //在停止位没有发送时,TI为0即一直等待
TI = ; //清除TI位(该位必须软件清零)
} void U1SendString(uint8 *s)
{
while (*s) //检测字符串结束标志
{
U1SendData(*s++); //发送当前字符
}
} void SendDataByUart1(uint8 dat)
{
if(!(dat^'a')|!(dat^'b')|!(dat^'c')|!(dat^'q') ){TI=; td= dat; }
else if(td=='a')
{ S2BUF = dat;
while(!(S2CON&S2TI));
S2CON&=~S2TI;
} else if(td=='b')
{
S3BUF = dat;
while(!(S3CON&S3TI));
S3CON&=~S3TI;
} else if (td=='c')
{
S4BUF = dat;
while(!(S4CON&S4TI));
S4CON&=~S4TI;
}
} void USART1_Tx_Puts(void)
{
if(Flag)
{
ES = ;
SendDataByUart1(uart1temp); ES = ;
Flag=FALSE;
}
}
/*
void Uart1() interrupt UART1_VECTOR
{
ES = 0;
Flag=TRUE;
if (RI )
{
RI = 0;
uart1temp = SBUF;
}
if (TI)
{
TI = 0;
}
ES = 1;
} */
void Uart1() interrupt UART1_VECTOR using
{
ES = ; // 串口1中断关闭
Flag=TRUE;
if (RI) //串行接收到停止位的中间时刻时,该位置1
{
RI = ; //清除RI位 (该位必须软件清零)
uart1temp = SBUF;
Rec_Buf[i] = uart1temp; //把串口1缓存SBUF寄存器数据依次存放到数组Rec_Buf中 i++;
if(i>Buf_Max) //接收数大于定义接收数组最大个数时,覆盖接收数组之前值
{
i = ;
}
}
if (TI) //在停止位开始发送时,该位置1
{
TI = ; //清除TI位(该位必须软件清零)
}
ES = ; // 串口1中断打开
} void ADC_config(void)
{
ADC_CONTR|=0x80; //开AD转换电源
delay_ms(); //适当延时等待AD转换供电稳定
P1ASF=0x10; //选择P1.4作为模拟功能AD使用
ADC_CONTR|=0x04; //选择P1.4作为AD转换通道输入使用
ADC_CONTR|=0x60; //AD转换速度为90个时钟周期转换一次
ADC_CONTR&=0xEF; //清AD转换完成标志
EADC=; //禁止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=;
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 <<= ;
AD_Dat|= ADC_RESL; //将ADC_RESL的8位移到应在的低8位
ADC_CONTR|=0x08; //重新启动AD转换,ADC_START=1。
return AD_Dat;
} int main(void)
{
uint16 TempPhoto,Temp;
uint8 strPhoto[]; //打开总中断
P1M1 &= 0x3F; P1M0 &= 0x3F; //设置P1.6~P1.7为准双向口
UartInit();
delay_ms(); //初始化后延时
ES = ;
EA = ;
while()
{ USART1_Tx_Puts ( );
if( td=='q')
{ break;
}
} ADC_config();
while ()
{
memset(strPhoto, , sizeof(strPhoto)); //strTemp数组清零
TempPhoto = Get_ADC10bitResult(); //实时读取P1.7通道的AD转换结果
delay_ms();
if(TempPhoto==Temp) //如果ADC检测结果没有变化,则不更新屏显示
{
;
}
else //如果ADC检测结果发生变化,则更新屏显示内容
{
Temp=TempPhoto;
strPhoto[] = TempPhoto/+; //光强度百位
strPhoto[] = (TempPhoto%)/+; //光强度十位
strPhoto[] = (TempPhoto%)%+; //光强度个位
U1SendString(strPhoto);
U1SendString("\r\n"); //输出回车换行符,方便观察数据
}
delay_ms(); }
}

pc send instructor pc ad的更多相关文章

  1. Mac下找不到gl.pc和glu.pc

    在用pkg-config可以用来自动查找对应库的include和lib文件,方便编译.它主要通过PKG_CONFIG_PATH和/usr/lib/pkgconfig目录下的.pc文件进行自动配置.在c ...

  2. 从MOV PC,PC;(或者ADDPC,PC,#4 )看ARM的三级流水线过程

    3级流水线如上图所示(PC为程序计数器),流水线使用3个阶段,因此指令分3个阶段执行. ⑴ 取指从存储器装载一条指令 ⑵ 译码识别将要被执行的指令 ⑶ 执行处理指令并将结果写会寄存器 以前学过的51单 ...

  3. Linux 内核PC/104 和 PC/104+

    当前在工业世界中, 2 个总线体系是非常时髦的: PC/104 和 PC/104+. 2 个在 PC-类 的 单板计算机中都是标准的. 2 个标准都是印刷电路板的特殊形式, 包括板互连的电子的/机械的 ...

  4. 关于ARM的PC指针(什么时候PC+8,PC+4,PC-4,PC-8)转

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.                                                 ...

  5. ARM获得PC指针为何PC=PC+8

    http://blog.csdn.net/sddzycnqjn/article/details/7691534 R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指 ...

  6. day32

    今日内容 1.基于TCP协议(通信循环) 2.基于TCP协议(连接循环) 3.粘包问题 4.模拟SSH实现远程执行命令 服务器端 ################################### ...

  7. 利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换

    我比较喜欢听音乐,特别是周末的时候,电脑开着百度随心听fm,随机播放歌曲,躺在床上享受.但碰到了一个烦人的事情,想切掉不喜欢的曲子,还得起床去操作电脑换歌.于是思考能不能用手机控制电脑切换歌曲,经过一 ...

  8. 让你在PC上调试Web App,UC浏览器发布开发者版

    目前,在手机上使用浏览器访问网页,无法便捷地进行网页语言调试.手机屏幕相对较小且操作不便,直接在手机上进行网页数据调试不太现实. 因此,UC使用技术将手机网页调试信息分离,实现一种能在大屏幕.高配置P ...

  9. C#--图片上传(PC端和APP)保存及 跨域上传说明

    手动跨域操作文件 补录:跨域访问文件夹文件是一种常见的需求,下面主要介绍的的通过代码使用具有权限账号的人来达到跨域操作文件的能力. 现在补充一下普通的一些需求场景,今天就遇到了一种需要经常需要登录远程 ...

随机推荐

  1. 使用lite-server

    进入项目根目录,执行下列步骤 安装lite-server npm install lite-server 新建配置文件bs-config.json bs-config.json中可以: 指定监听的端口 ...

  2. 并发之lock的condition接口

    13.死磕Java并发-----J.U.C之Condition 12.Condition使用总结 11.Java并发编程系列之十七:Condition接口 === 13.死磕Java并发-----J. ...

  3. oracle体系结构理解

    体系结构相关内容每次看遍书,过段时间就忘了..无奈用自己理解的方式记录之. 1.commit与写盘与否没有关系,也就是说修改数据(insert update delete)后并提交数据,这条被修改的数 ...

  4. go api json 输出尝试

    package main import ( "fmt" "net/http" //"net/url" "github.com/dr ...

  5. wordpress 解决文章内http链接问题

    1. 登录Wordpress后台, 常规设置  > 里面把站点URL 修改成 https开头 2. 登录phpmyadmin , 执行替换链接的SQL 替换wordpress配置的链接地址 (可 ...

  6. WHERE 子句操作符

    操作符(operator) 用来联结或改变WHERE子句中得子句的关键字,也称为逻辑操作符(logical operator): 操作符 说  明 = 等于 <> 不等于 != 不等于 & ...

  7. android 开发 框架系列 使用 FileDownloader 实现检查更新的功能class

    首先介绍一下FileDownloader GH :https://github.com/lingochamp/FileDownloader/blob/master/README-zh.md FileD ...

  8. win7 英文版 中文乱码

    win7 为了使用英文的 pcb 软件,把语言包改为英文版后,碰到一部分中文会变成乱码.通过下面方法可以识别: control panel --> region and language --& ...

  9. Java 身份证号码验证

    身份证号码验证 1.号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码 2.地址码(前 ...

  10. python学习笔记_week27

    search import time import random def cal_time(func): def wrapper(*args, **kwargs): t1 = time.time() ...