PIC单片机测试例程汇总Word文件下载.docx

上传人:b****6 文档编号:19590519 上传时间:2023-01-08 格式:DOCX 页数:12 大小:140.74KB
下载 相关 举报
PIC单片机测试例程汇总Word文件下载.docx_第1页
第1页 / 共12页
PIC单片机测试例程汇总Word文件下载.docx_第2页
第2页 / 共12页
PIC单片机测试例程汇总Word文件下载.docx_第3页
第3页 / 共12页
PIC单片机测试例程汇总Word文件下载.docx_第4页
第4页 / 共12页
PIC单片机测试例程汇总Word文件下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

PIC单片机测试例程汇总Word文件下载.docx

《PIC单片机测试例程汇总Word文件下载.docx》由会员分享,可在线阅读,更多相关《PIC单片机测试例程汇总Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。

PIC单片机测试例程汇总Word文件下载.docx

//AN功能口电平不能改变

delay();

RA5=0;

}

}

voiddelay()

uinta;

//定义局部变量

for(a=10;

a>

0;

a--){}

//PORTA和PORTE口作为IO用的定义

//While

(1)在这里作为一个大循环用,如果后面加“;

”号,则程序将停在While

(1)不往下执行。

-----------------------------------------------------------------------------------------------------------------

voiddelay(uintx);

//声明子函数

TRISD2=0;

RD2=1;

delay(5);

//可以改变程序延时时间,当前5.04mS

RD2=0;

voiddelay(uintx)//4M晶振

uinta,b;

for(a=x;

a--)//完整嵌套如下

for(b=110;

b>

b--)

};

//分号加亦可,不加亦可

//在延时程序的前后两个地方设置断点(Breakpoints),再打开Stopwatch,然后全速运行两次

-----------------------------------------------------------

delay();

//延时1.05mS

voiddelay()//4M晶振

a--)//for嵌套

for(b=10;

b--);

uinti;

for(i=0;

i<

20000;

i++);

我们怎么来算呢,先将20000转成16进制,得到4E20,然后将高字节4E乘以6得到十进制468,再将468+2=470,然后将十进制470*十六进制20(即十进制32)=15040;

所心这个延时函数总共要执行15040个周期,假设所用的晶振为12MHZ,则该段函数总延时:

15.04ms。

有了这个公式我们如果想要设定指定的延时长度就可以用它的己知公式确定。

即:

总时间=[(6*i值的高8位)+2]*i的低8位。

例如:

设要延时125ms。

我们将低字节先赋值十进制200*(即:

C8),然后再算高低节的定值,由式中可知125ms=200*((i值的高字节*6)+2),又可推算出(高低节*6)+2的总延迟时间应等于625us,将625/6=104.1666,取整数得到104,将104转成16进制得到68H,再将高字节和低字节组合起来即得到了定值,即:

十六进制68C8,代入函数即如下:

0x68C8;

如果写十进制就要将68C8转成10进制,即:

26824,代入后得到:

26824;

第一步:

选择单片机晶振

第二步:

全编译

第三步:

按d进入软件调试

第四步:

进入程序设置两个断点:

第五步:

按全速运行至第一个断点:

注意时间是0.000389s

第六步:

再按一次全速运行至第二个断点:

注意时间是1.013412s

/////////////////////////////////////////////////

voidBuzz(ucharnum);

//蜂鸣器发声子函数

voidscan();

//按键扫描子函数

TRISB=0xff;

TRISE0=0;

RE0=0;

scan();

//扫描按键蜂鸣器发声

voidscan()

if(RB0==0)

delay(10);

while(!

RB0)

Buzz

(2);

//发两声

voidBuzz(ucharnum)

ucharBuzz_num;

for(Buzz_num=num;

Buzz_num>

Buzz_num--)

RE0=1;

delay(50);

delay(20);

2、I2C端口模拟

uchara;

#definesdaRC1

#definesclRC2

////////////////////////////////////////////////子函数声明

voidstart();

//开始信号

voidstop();

//停止

voidrespons();

//应答

voidinit();

voidwrite_byte(uchardate);

//写一个字节

ucharread_byte();

//读一个字节

voidwrite_add(ucharaddress,uchardate);

//写任意字节

ucharread_add(ucharaddress);

//读任意字节

voiddelay1(ucharx);

////////////////////////////////////////////////主函数

init();

write_add(23,0xaa);

delay1(100);

PORTB=read_add(23);

while

(1);

////////////////////////////////////////////////

voidstart() 

TRISC=0x00;

TRISB=0x00;

sda=1;

scl=1;

sda=0;

voidstop() 

sda=0;

scl=1;

sda=1;

voidrespons() 

uchari;

while((sda==1)&

&

(i<

250))i++;

//防止死循环

scl=0;

voidinit()

voidwrite_byte(uchardate)

ucharbit_count;

for(bit_count=0;

bit_count<

8;

bit_count++)

{

if((date<

<

bit_count)&

0x80){sda=1;

scl=0;

ucharread_byte()

uchari,k;

i++)

k=(k<

1)|sda;

returnk;

//带返回值

voidwrite_add(ucharaddress,uchardate)

start();

write_byte(0xa0);

//器件地址写操作

respons();

write_byte(address);

//要写数据的地址

write_byte(date);

//要写的数据

stop();

ucharread_add(ucharaddress)

uchardate;

write_byte(0xa1);

//器件地址读操作

date=read_byte();

//读一个字节放入date

returndate;

{;

;

voiddelay1(ucharx)

uchara,b;

a--)

for(b=100;

#defineucharunsignedchar

unsignedint

#defineDQRC1 

//定义一个端口

#defineDQ_HIGH()TRISC1=1

#defineDQ_LOW()TRISC1=0;

DQ=0

constuchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f};

constuchartable1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,

0x87,0xff,0xef};

uinttemper;

uchara1,a2,a3,a4;

voiddelayus(uint,uchar);

voiddisp(ucharnum1,ucharnum2,ucharnum3,ucharnum4);

voidget_tem();

while

(1)

// 

ucharnum;

get_tem();

for(num=20;

num>

num--)

disp(a1,a2,a3,a4);

voidreset()

ucharst=1;

DQ_HIGH();

NOP();

while(st)

DQ_LOW();

delayus(70,30);

delayus(4,4);

if(DQ==1)

st=1;

else

st=0;

delayus(50,10);

uchari,temp;

for(i=8;

i>

i--)

temp=date&

0x01;

//01010101

delayus(0,0);

if(temp==1)

delayus(2,2);

date=date>

>

1;

//00101010

uchari,date;

staticbitj;

//定义一位

j=DQ;

if(j==1)

date=date|0x80;

//10000000

delayus(1,1);

return(date);

voidget_tem()

uchartem1,tem2,num;

floataaa;

reset();

//复位

write_byte(0xCC);

//跳过ROM

write_byte(0x44);

//温度转换

for(num=100;

write_byte(0xBE);

tem1=read_byte();

tem2=read_byte();

aaa=(tem2*256+tem1)*6.25;

//此处的结果为浮点数

temper=(int)aaa;

//强制转换成整型送入temper

a1=temper/1000;

a2=temper00/100;

a3=temper0/10;

a4=temper;

voiddelayus(uintx,uchary)

ucharj;

for(i=x;

i--);

for(j=y;

j>

j--);

voiddelay(uintx)

for(b=110;

TRISD=0;

TRISA=0;

PORTD=0;

PORTA=0;

voiddisp(ucharnum1,ucharnum2,ucharnum3,ucharnum4)

PORTD=table[num1];

//显示第一个数码管

PORTA=0x20;

//00100000

delay

(2);

PORTD=table1[num2];

//显示第二个数码管

PORTA=0x10;

//00010000

PORTD=table[num3];

//显示第三个数码管

PORTA=0x08;

//00001000

PORTD=table[num4];

//显示第四个数码管

PORTA=0x04;

//00000100

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1