PIC单片机应用开发典型模块第一章程序Word文档下载推荐.docx

上传人:b****3 文档编号:17817757 上传时间:2022-12-11 格式:DOCX 页数:41 大小:34.11KB
下载 相关 举报
PIC单片机应用开发典型模块第一章程序Word文档下载推荐.docx_第1页
第1页 / 共41页
PIC单片机应用开发典型模块第一章程序Word文档下载推荐.docx_第2页
第2页 / 共41页
PIC单片机应用开发典型模块第一章程序Word文档下载推荐.docx_第3页
第3页 / 共41页
PIC单片机应用开发典型模块第一章程序Word文档下载推荐.docx_第4页
第4页 / 共41页
PIC单片机应用开发典型模块第一章程序Word文档下载推荐.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

PIC单片机应用开发典型模块第一章程序Word文档下载推荐.docx

《PIC单片机应用开发典型模块第一章程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《PIC单片机应用开发典型模块第一章程序Word文档下载推荐.docx(41页珍藏版)》请在冰豆网上搜索。

PIC单片机应用开发典型模块第一章程序Word文档下载推荐.docx

adr)*8+(bit))/*绝对寻址位操作指令*/

staticbitPORTA_5@PORTAIT(PORTA,5);

/*************************************************************************/

/*函数名:

SPIINT()*/

/*功能:

SPIi初始化*/

voidSPIINIT()

PIR1=0;

SSPCON=0x30;

/*允许SPI工作在主控方式下,SSPEN=1;

CKP=1,

/*FOSC/4*/

SSPSTAT=0xC0;

TRISC=0x00;

/*SDO引脚为输出,SCK引脚为输出*/

initial()*/

系统各输入输出口初始化*/

voidinitial()

TRISA=0x00;

/*A口设置为输出*/

INTCON=0x00;

/*关闭所有中断*/

PORTA_5=0;

/*LACK送低电平,为锁存做准备*/

/****************************************************************************/

SPILED()*/

SPI发送数据*/

voidSPILED(intdata)

SSPBUF=data;

/*启动发送*/

do

}while(SSPIF==0);

/*等待发送完毕*/

SSPIF=0;

/*清除SSPIF标志*/

/***************************************************************************/

main()*/

主程序*/

unsignedi;

initial();

/*系统初始化*/

SPIINIT();

/*SPI初始化*/

for(i=8;

i>

0;

i--)/*连续发送8个数据*/

{

data=table[i];

/*通过数组的转换获得待显示的段码*/

SPILED(data);

/*发送显示段码显示*/

}

PORTA_5=1;

/*最后给锁存信号,代表显示任务完成*/

(2)I2C工作方式驱动MAX518程序

利用PIC16F877的I2C方式来驱动D/A转换器,使之输出一个连续的正弦波形(本程序并没有对正弦波的频率进行控制)。

SPIINT()*/

spi初始化*/

FOSC/4*/

/*SDO引脚为输出,SCK引脚为输出*/

SPILED()*/

/*清除SSPIF标志*/

main()*/

主程序*/

/*SPI初始化*/

/*通过数组的转换获得待显示的段码*/

/*发送显示段码显示*/

/*最后给锁存信号,代表显示任务完成*/

(3)利用I2C访问24C02E2PROM

利用I2C总线对24C02进行访问,首先对芯片进行配置。

程序运行后,当24C02准备好时另LED0亮,测试完成后令LED7亮,对24C02进行读写操作时零LED1、LED3、LED7亮。

程序代码如下:

16F877A.h>

 

 

//PIC16F877headerfile

#usedelay(clock=4000000) 

//for4Mhzcrystal

#fusesXT,NOWDT,NOPROTECT,NOLVP 

//编译模式

#defineEEPROM_24C02_SDA 

PIN_B5

#defineEEPROM_24C02_SCL 

PIN_B4

#defineEEPROM_24C02_SIZE 

256

#usei2c(master,sda=EEPROM_24C02_SDA,scl=EEPROM_24C02_SCL)

voidinit_eeprom_24c02(void)

port_b_pullups(true);

output_float(EEPROM_24C02_SCL);

output_float(EEPROM_24C02_SDA);

}//endinit_24c02()

int8eeprom_24c02_ready(void)

int1ack;

i2c_start();

 

//Ifwritecmdisacknowledged,

ack=i2c_write(0xa0);

//thenthedeviceisready.

i2c_stop();

return(0==ack)?

0xff:

0;

}//endeeprom_24c02_ready()

voideeprom_24c02_write(int8addr,int8data)

while(0==eeprom_24c02_ready());

//wait24c02ready

i2c_write(0xa0);

i2c_write(addr);

i2c_write(data);

}//endeeprom_24c02_write()

int8eeprom_24c02_read(int8addr)

int8data;

i2c_write(0xa1);

data=i2c_read(0);

return(data);

}//endeeprom_24c02_read()

int8eeprom_24c02_test(void)

int16i;

//write0x55test

for(i=0;

i<

EEPROM_24C02_SIZE;

++i)

eeprom_24c02_write(i,0x55);

if(0x55!

=eeprom_24c02_read(i))return0;

}

//write0xaatest

eeprom_24c02_write(i,0xaa);

if(0xaa!

//writeeeprom0

eeprom_24c02_write(i,0x00);

return0xff;

}//endeeprom_24c02_test()

voidmain(void)

init_eeprom_24c02();

//24c02isready

if(0!

=eeprom_24c02_ready())

output_high(PIN_C0);

//test24c02

=eeprom_24c02_test())

output_high(PIN_C7);

delay_ms(1000);

//write24c02

eeprom_24c02_write(0,0xaa);

//read24c02

output_c(eeprom_24c02_read(0));

}//endmain()

1.3PIC单片机的定时器/计数器模块的应用

通过配置PIC单片机寄存器,使TIMER0定时来实现秒表的功能。

math.h>

//此程序实现计时秒表功能,时钟显示范围00.00~99.99s,分辨度:

0.01s

unsignedchars0,s1,s2,s3;

//定义0.01s、0.1s、1s、10s计时器

unsignedchars[4];

unsignedchark,data,sreg;

unsignedinti;

consttable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90};

//不带小数点的显示段码表

consttable0[10]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10};

//带小数点的显示段码表

/*****************************************************************************/

tmint()*/

TMR0初始化子程序,使TMR0工作于定时器方式*/

voidtmint()

T0CS=0;

//TMR0工作于定时器方式

PSA=1;

//TMR0不用分频

T0IF=0;

//清除TMR0的中断标志

T0IE=1;

//TMR0中断允许

SPIINIT()*/

spi显示初始化子程序*/

SSPSTAT=0xC0;

//设置SPI的控制方式,允许SSP方式,并且时钟下降沿发//送。

与"

74HC595,当其SCLK从低到高跳变时,串行输入*/

TRISC=0xD7;

//SDO引脚为输出,SCK引脚为输出

TRISA5=0;

//RA5引脚置为输出,输出显示锁存信号

系统其它部分初始化子程序*/

TRISB1=0;

TRISB2=0;

TRISB4=1;

TRISB5=1;

//设置与键盘有关的各口的输入输出方式

RB1=0;

RB2=0;

//建立键盘扫描的初始条件

/*函数名;

/*功能;

SPI传输数据子程序*/

voidSPILED(data)

//启动发送

do{

}while(SSPIF==0);

SSPIF=0;

disply()*/

显示子程序,显示4位数*/

voiddispaly()

RA5=0;

//准备锁存

for(k=4;

k>

k--)

data=s[k-1];

if(k==3)data=table0[data];

//第二位需要显示小数点

elsedata=table[data];

//发送显示段码

}

for(k=0;

k<

4;

k++)

data=0xFF;

//连续发送4个DARK,使显示美观

RA5=1;

//最后给锁存信号,代表显示任务完成

DELAY()*/

/功能:

软件延时子程序*/

voidDELAY()

for(i=3553;

--i;

)continue;

KEYSCAN()*/

键扫描子程序*/

/*

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

当前位置:首页 > 法律文书 > 调解书

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

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