欢迎来到天天文库
浏览记录
ID:51437542
大小:137.00 KB
页数:12页
时间:2020-03-24
《PIC单片机C语言编程实例一.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第5章PIC16F877的外围功能模块5.1.2简单应用实例该例用于令与PORTD口相连的8个发光二极管前4个点亮,后4个熄灭。在调试程序前,应使与PORTD口相连的8位拔码开关拔向相应的位置。例5.1PORTD输出#includemain(){TRISD=0X00;/*TRISD寄存器被赋值,PORTD每一位都为输出*/while(1);/*循环执行点亮发光二极管的语句*/{PORTD=0XF0;/*向PORTD送数据,点亮LED(由实验模板*//*的设计决定相应位置低时LED点亮)。*/}}5
2、.2.1MSSP模块SPI方式功能简介下面是一段简单的SPI初始化例程,用于利用SPI工作方式输出数据的场合。例5.2SPI初始化程序/*spi初始化子程序*/voidSPIINIT(){PIR1=0;/*清除SPI中断标志*/SSPCON=0x30;/*SSPEN=1;CKP=0,FOSC/4*/SSPSTAT=0xC0;TRISC=0x00;/*SDO引脚为输出,SCK引脚为输出*/}5.2.3程序清单下面给出已经在实验板上调试通过的一个程序,可作为用户编制其它程序的参考。#include3、.h>/*该程序用于在8个LED上依次显示1~8等8个字符*/staticvolatileinttable[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};volatileunsignedchardata;#definePORTAIT(adr,bit)((unsigned)(&adr)*8+(bit))/*绝对寻址位操作指令*/99staticbit4、PORTA_5@PORTAIT(PORTA,5);/*spi初始化子程序*/voidSPIINIT(){PIR1=0;SSPCON=0x30;/*SSPEN=1;CKP=0,FOSC/4*/SSPSTAT=0xC0;TRISC=0x00;/*SDO引脚为输出,SCK引脚为输出*/}/*系统各输入输出口初始化子程序*/voidinitial(){TRISA=0x00;/*A口设置为输出*/INTCON=0x00;/*关闭所有中断*/PORTA_5=0;/*LACK送低电平,为锁存做准备*/}/*SPI发送子程序*5、/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;/*最6、后给锁存信号,代表显示任务完成*/99}5.3.3程序清单下面给出已经在实验板上调试通过的程序,可作为用户编制其它程序的参考。有关显示部分的SPI初始化,请读者参考5.2节。#include/*该程序用于按下相应的键时,在第一个8段LED上显示相应的1~4的字符*/#definePORTAIT(adr,bit)((unsigned)(&adr)*8+(bit))/*绝对寻址位操作指令*/staticbitPORTA_5@PORTAIT(PORTA,5);#definePORTBIT(adr,bit7、)((unsigned)(&adr)*8+(bit))/*绝对寻址位操作指令*/staticbitPORTB_5@PORTBIT(PORTB,5);staticbitPORTB_4@PORTBIT(PORTB,4);staticbitPORTB_1@PORTBIT(PORTB,1);staticbitPORTB_2@PORTBIT(PORTB,2);unsignedintI;unsignedcharj;intdata;/*spi初始化子程序*/voidSPIINIT(){PIR1=0;SSPCON=0x30;S8、SPSTAT=0xC0;TRISC=0xD7;/*SDO引脚为输出,SCK引脚为输出*/}/*系统各输入输出口初始化子程序*/voidinitial(){TRISA=0xDF;TRISB=0XF0;/*设置与键盘有关的各口的数据方向*/INTCON=0x00;/*关闭所有中断*/data=0X00;/*待显示的寄存器赋初值*/PORTB=0X00;/*RB1RB2先送低电平*/j=0;
3、.h>/*该程序用于在8个LED上依次显示1~8等8个字符*/staticvolatileinttable[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};volatileunsignedchardata;#definePORTAIT(adr,bit)((unsigned)(&adr)*8+(bit))/*绝对寻址位操作指令*/99staticbit
4、PORTA_5@PORTAIT(PORTA,5);/*spi初始化子程序*/voidSPIINIT(){PIR1=0;SSPCON=0x30;/*SSPEN=1;CKP=0,FOSC/4*/SSPSTAT=0xC0;TRISC=0x00;/*SDO引脚为输出,SCK引脚为输出*/}/*系统各输入输出口初始化子程序*/voidinitial(){TRISA=0x00;/*A口设置为输出*/INTCON=0x00;/*关闭所有中断*/PORTA_5=0;/*LACK送低电平,为锁存做准备*/}/*SPI发送子程序*
5、/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;/*最
6、后给锁存信号,代表显示任务完成*/99}5.3.3程序清单下面给出已经在实验板上调试通过的程序,可作为用户编制其它程序的参考。有关显示部分的SPI初始化,请读者参考5.2节。#include/*该程序用于按下相应的键时,在第一个8段LED上显示相应的1~4的字符*/#definePORTAIT(adr,bit)((unsigned)(&adr)*8+(bit))/*绝对寻址位操作指令*/staticbitPORTA_5@PORTAIT(PORTA,5);#definePORTBIT(adr,bit
7、)((unsigned)(&adr)*8+(bit))/*绝对寻址位操作指令*/staticbitPORTB_5@PORTBIT(PORTB,5);staticbitPORTB_4@PORTBIT(PORTB,4);staticbitPORTB_1@PORTBIT(PORTB,1);staticbitPORTB_2@PORTBIT(PORTB,2);unsignedintI;unsignedcharj;intdata;/*spi初始化子程序*/voidSPIINIT(){PIR1=0;SSPCON=0x30;S
8、SPSTAT=0xC0;TRISC=0xD7;/*SDO引脚为输出,SCK引脚为输出*/}/*系统各输入输出口初始化子程序*/voidinitial(){TRISA=0xDF;TRISB=0XF0;/*设置与键盘有关的各口的数据方向*/INTCON=0x00;/*关闭所有中断*/data=0X00;/*待显示的寄存器赋初值*/PORTB=0X00;/*RB1RB2先送低电平*/j=0;
此文档下载收益归作者所有