1.��Ƭ��Դ��Դ��
2.单片机语言 include<reg52.h>是单片什么意思
3.求超声波发生器的单片机源代码
��Ƭ��Դ��Դ��
#include <reg.h>
#include <math.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define INBUF_LEN 6 //数据长度
unsigned char inbuf1[INBUF_LEN]={ '0','0','0','0','0','0'};//发送缓冲区
unsigned char code table[] = { 0xc0,0xf9,0xa4,0xb0,0x,0x,0x,0xf8,0x,0x,0x,0x,0xc6,0xa1,0x,0x8e};//共阳数码管显示0~F
unsigned char code dis_8[]={ '0','1','2','3','4','5','6','7','8','9',' ','-'};
sbit CS=P2^5; //定义片选信号IO口
sbit SCLK=P2^4; //定义时钟信号IO口
sbit DIN=P2^3; //定义数据输入IO口
uint temp;
void init_serialcomm( void )
{
SCON = 0x ; //SCON: serail mode 1, 8-bit UART, enable ucvr
T2CON=0x;
TH2=0x;
TL2=0x;
RCAP2H=0xFF;
RCAP2L=0xDC;
TR2=1;
}
//向串口发送一个字符
void send_char_com( unsigned char ch)
{
SBUF=ch;
while (TI== 0 );
TI= 0 ;
}
//向串口发送一个字符串,strlen 为该字符串长度
void send_string_com( unsigned char *str,机源 unsigned int strlen)
{
unsigned int k= 0 ;
do
{
send_char_com(*(str + k));
k++;
} while (k < strlen);
}
void delay(uint k) //延时函数
{
uint i,j;
for(i=0;i<k;i++){
for(j=0;j<;j++)
{ ;}}
}
//实现DA转换
void DAConvert(uint Data){
uchar i;
Data<<=6;
CS=0;
SCLK=0;
for (i=0;i<;i++){
DIN=(bit)(Data&0x);
SCLK=1;
Data<<=1;
SCLK=0;
}
CS=1;
SCLK=0;
for (i=0;i<;i++);
}
//定时器0中断处理中键扫描和显示
void KeyAndDis_Time0(void) interrupt 1 using 2
{
TH0=0xdc;
TL0=0x;//设定时值为ms
P0= table[ temp/];
P2=0x;
delay(2);
P0= table[ (temp%)/];
P2=0x;
delay(2);
P0= table[ (temp%)/];
P2=0x;
delay(2);
P0= table[ temp%];
P2=0x;
delay(2);
}
//主程序
main(){
uint i;
init_serialcomm(); //初始化串口
EA = 1; //允许CPU中断
ET0 = 1; //定时器0中断打开
TMOD = 0x; //设定时器0为模式1,位模式
TH0=0xdc;
TL0=0x; //设定时值为ms
TR0 = 1;
while(1){
for(i=;i<;i+=2){
DAConvert(i);//启动转换
temp=i;
inbuf1[0]=dis_8[temp/];
inbuf1[1]=dis_8[(temp%)/];
inbuf1[2]=dis_8[(temp%)/];
inbuf1[3]=dis_8[temp%];
inbuf1[4]=0x0d;
inbuf1[5]=0;
send_string_com(inbuf1,码源码单INBUF_LEN);//串口输出到上位机
delay(1);
}
for(i=;i>;i-=2){ DAConvert(i);//启动转换
temp=i;
inbuf1[0]=dis_8[temp/];
inbuf1[1]=dis_8[(temp%)/];
inbuf1[2]=dis_8[(temp%)/];
inbuf1[3]=dis_8[temp%];
inbuf1[4]=0x0d;
inbuf1[5]=0;
send_string_com(inbuf1,INBUF_LEN);
delay(1);
}
}
}
希望对你有帮助。
单片机语言 include<reg.h>是片机什么意思
在单片机编程中,`#include ` 是程序固定资产系统源码淘源码一个预编译指令,它的源码源码酷作用是将系列单片机的专用头文件 reg.h 整合到你的源代码中。当程序遇到这个指令时,单片编译器会从指定路径查找并插入文件reg.h的机源内容,使得你可以直接使用其中定义的码源码单寄存器和函数,而无需重复编写相关的片机地址和操作指令。
reg.h文件实质上是程序一份包含了或系列单片机特定资源的函数库,比如对P0、源码P1、单片龙源码P2、机源P3口的码源码单特殊寄存器(如P0口特殊寄存器寻址位sfrP0),程序状态字寄存器PSW,累加器ACC,信源码以及一系列定时器、计数器控制寄存器等的声明和操作说明。通过这个头文件,你可以方便地访问和操作这些单片机的苹果源码硬件资源。
举几个例子,sfrP0=0x说明P0口的特殊寄存器可以通过0x的地址寻址,sfrSP=0x则是堆栈指针寄存器的地址。这样,当你的代码中写入`P0.0 = 1;`这样的语句时,实际上是在对P0口的第0位寄存器进行操作。
总之,`include ` 是为了简化对系列单片机硬件资源的访问,提高了编程效率和代码的可读性。
求超声波发生器的单片机源代码
//设计:ch
//模块使用方法:一个控制口发一个US以上的高电平,就可以在接收口等待高电平输出.
//一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测
//距的时间,方可算出距离.如此不断的周期测,就可以达到你移动测量的值了
//波特率(晶振M)
#include <reg.h>
#include <intrins.h> //调用 _nop_(); 延时函数
#define uchar unsigned char
#define uint unsigned int
sbit trigger=P2^0; //触发引脚
sbit rx=P2^1; //接收引脚
sbit key=P3^6; //按键
unsigned char key_scan(void);
uchar chaoshengbo(void);
void uart_init(void);
void uart(uchar distance);
void chaoshengbo_init(void);
uchar distance; //距离
void main()
{
uart_init(); //串口初始化
chaoshengbo_init(); //超声波初始化
uart('A') ; //串口发送'A'
while(1)
{
if (key_scan() == 1) //按键按下
{
distance = chaoshengbo(); //超声波测距
uart(distance); //串口发送距离 单位厘米
}
}
}
unsigned char key_scan(void) //按键查询
{
unsigned char on = 0,i;
while(1)
{
if(key==0) //判断是否按下
{
for(i=0;i<;i++); //软件延时
if(key==0) //再次判断是否按下
{
on = 1;
break; //跳出循环
}
}
}
while(key==0);
return 1;
}
void uart_init(void) //串口初始化,用的是T1
{
TMOD=TMOD & 0x0f | 0x;
TH1=0Xfd; //波特率(晶振M)
TL1=0Xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
}
void uart(uchar distance) //发送一个字节
{
SBUF = distance;
while(!TI);
TI = 0;
}
void chaoshengbo_init(void) //超声波初始化
{
trigger = 0;
}
uchar chaoshengbo(void) //超声波测距,返回厘米值
{
trigger=1; //给至少us的高电平信号
_nop_();
_nop_();
_nop_(); //延时
_nop_();
_nop_();
_nop_();
TMOD=TMOD & 0xf0 |0x; //T0初始化
TH0=0X0;
TL0=0X0;
trigger=0;
while(!rx); //等待上升沿
EA = 0; //关中断
TR0=1; //开启T0定时器
while(rx); //等待下降沿
TR0=0; //关闭T0定时器
EA = 1; //开中断
return (TH0*+TL0)*0./2; //计算距离 单位厘米
}