PIC单片机C语言编程实例一.doc

上传人:夏** 文档编号:560875866 上传时间:2024-04-02 格式:DOC 页数:12 大小:82.50KB
返回 下载 相关 举报
PIC单片机C语言编程实例一.doc_第1页
第1页 / 共12页
PIC单片机C语言编程实例一.doc_第2页
第2页 / 共12页
PIC单片机C语言编程实例一.doc_第3页
第3页 / 共12页
PIC单片机C语言编程实例一.doc_第4页
第4页 / 共12页
PIC单片机C语言编程实例一.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《PIC单片机C语言编程实例一.doc》由会员分享,可在线阅读,更多相关《PIC单片机C语言编程实例一.doc(12页珍藏版)》请在金锄头文库上搜索。

1、5.1.2 简单应用实例该例用于令与PORTD口相连的8个发光二极管前4个点亮,后4个熄灭。在调试程序前,应使与PORTD口相连的8位拔码开关拔向相应的位置。例5.1 PORTD输出#includemain()TRISD=0X00;/*TRISD寄存器被赋值,PORTD每一位都为输出*/while(1);/*循环执行点亮发光二极管的语句*/PORTD=0XF0;/*向PORTD送数据,点亮LED(由实验模板*/*的设计决定相应位置低时LED点亮)。*/ 5.2.1 MSSP模块SPI方式功能简介下面是一段简单的SPI初始化例程,用于利用SPI工作方式输出数据的场合。例5.2 SPI初始化程序/

2、*spi初始化子程序*/void SPIINIT()PIR1=0;/*清除SPI中断标志*/SSPCON=0x30;/* SSPEN=1;CKP=0 , FOSC/4 */SSPSTAT=0xC0;TRISC=0x00;/*SDO引脚为输出,SCK引脚为输出*/5.2.3 程序清单下面给出已经在实验板上调试通过的一个程序,可作为用户编制其它程序的参考。#include/*该程序用于在8个LED上依次显示18等8个字符*/static volatile int table20=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,

3、0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff;volatile unsigned char data; #define PORTAIT(adr,bit) (unsigned)(&adr)*8+(bit)/*绝对寻址位操作指令*/staticbit PORTA_5 PORTAIT(PORTA,5); /*spi初始化子程序*/voidSPIINIT()PIR1=0;SSPCON=0x30;/* SSPEN=1;CKP=0 , FOSC/4 */SSPSTAT=0xC0;TRISC=0x00;/*SDO引脚为输出,SCK引脚为输出*/*系统各输入输出口初始化子程序

4、*/voidinitial()TRISA=0x00;/*A口设置为输出*/INTCON=0x00;/*关闭所有中断*/PORTA_5=0;/*LACK送低电平,为锁存做准备*/*SPI发送子程序*/void SPILED(int data)SSPBUF=data;/*启动发送*/do;while(SSPIF=0);/*等待发送完毕*/SSPIF=0;/*清除SSPIF标志*/*主程序*/main()unsignedI;initial();/*系统初始化*/SPIINIT();/*SPI初始化*/ for(i=8;i0;i-)/*连续发送8个数据*/ data=tablei;/*通过数组的转换获

5、得待显示的段码*/SPILED(data);/*发送显示段码显示*/ PORTA_5=1;/*最后给锁存信号,代表显示任务完成*/5.3.3 程序清单下面给出已经在实验板上调试通过的程序,可作为用户编制其它程序的参考。有关显示部分的SPI初始化,请读者参考5.2节。#include/*该程序用于按下相应的键时,在第一个8段LED上显示相应的14的字符*/#define PORTAIT(adr,bit) (unsigned)(&adr)*8+(bit)/*绝对寻址位操作指令*/static bit PORTA_5 PORTAIT(PORTA,5);#definePORTBIT(adr, bit)

6、(unsigned)(&adr)*8+(bit) /*绝对寻址位操作指令*/static bit PORTB_5 PORTBIT(PORTB,5);static bit PORTB_4 PORTBIT(PORTB,4);static bit PORTB_1 PORTBIT(PORTB,1);static bit PORTB_2 PORTBIT(PORTB,2);unsigned intI;unsigned charj;int data; /*spi初始化子程序*/void SPIINIT()PIR1=0;SSPCON=0x30;SSPSTAT=0xC0;TRISC=0xD7;/*SDO引脚为输

7、出,SCK引脚为输出*/*系统各输入输出口初始化子程序*/void initial()TRISA=0xDF;TRISB=0XF0;/*设置与键盘有关的各口的数据方向*/INTCON=0x00;/*关闭所有中断*/data=0X00;/*待显示的寄存器赋初值*/PORTB=0X00;/*RB1 RB2 先送低电平*/j=0;/*软件延时子程序*/voidDELAY()for(i = 6553; -i ;)continue;/*键扫描子程序*/intKEYSCAN()while(1)if (PORTB_5=0)|(PORTB_4=0)break;/*等待有键按下*/DELAY();/*软件延时*/

8、if (PORTB_5=0)|(PORTB_4=0)KEYSERVE();/*如果仍有键按下,则调用键服务子程序*/elsej=0x00;/*如果为干扰,则令返回值为0*/return(j);/*键服务子程序*/intKEYSERVE()PORTB=0XFD;if(PORTB_5=0)j=0X01;if(PORTB_4=0)j=0X03;PORTB=0XFB;if(PORTB_5=0)j=0X02;if(PORTB_4=0)j=0X04;/*以上根据按下的键确定相应的键值*/PORTB=0X00;/*恢复PORTB的值*/while(1)if(PORTB_5=1)&(PORTB_4=1) br

9、eak;/*等待键盘松开*/return(j);/*SPI发送子程序*/void SPILED(int data)SSPBUF=data;/*启动发送*/do ;while(SSPIF=0);/*等待发送完毕SSPIF=0;/*主程序*/main()static int table20=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff;initial();/*系统初始化*/SPIINIT();/*SPI初始化*/while(1)KEYSCAN()

10、;if(j!=0)/*如果j=0,证明先前的按键为干扰,则不予显示*/data=tablej;PORTA_5=0;/*LACK信号清0,为锁存做准备*/SPILED(data);PORTA_5=1;/*最后给锁存信号,代表显示任务完成*/ 5.4.1 PORTB端口“电平变化中断”简介例5.3 PORTB口“电平变化中断”初始化子程序/*B口“电平变化中断”初始化子程序*/void PORTBINT( )TRISB=0XF0;/*设置相应口的输入输出方式*/OPTION=0x7F;/*B口弱上拉有效*/PORTB=0X00;/*RB1,RB2 先送低电平*/RBIE=1;/*B口变位中断允许

11、*/PORTB=PORTB;/*读B口的值,以锁存旧值,为变位中断创造条件*/5.4.3 程序清单下面给出一个调试通过的例程,以供读者参考。有关显示的部分请读者参考前面章节。该程序中寄存器的位都用头文件中定义的位,如RB5表示PORTB的第5位,而不像前面几节那样自己定义。#include/*该程序用于通过PORTB的电平变化中断进行键盘的识别。*/*程序设置一个键值寄存器j,当按下S9键时j=1,按下S11键时 */*j=2,按下S10键时,j=3,按下S12键时j=4*/unsigned chardata;unsigned intI;unsigned charj;const char ta

12、ble20=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff;/*B口“电平变化中断”初始化子程序*/void PORTBINT()TRISB=0XF0;/*设置相应口的输入输出方式*/OPTION=0x7F;PORTB=0X00;/*RB1, RB2 先送低电平*/RBIE=1;/*B口变位中断允许 */PORTB=PORTB;/*读B口的值,为变位中断创造条件*/*spi初始化子程序*/void SPIINIT()PIR1=0;SSPCON=

13、0x30;SSPSTAT=0xC0;TRISC=0xD7;/*SDO引脚为输出,SCK引脚为输出*/*系统各输入输出口初始化子程序*/voidinitial()TRISA=0xDF;INTCON=0x00;/*关闭所有中断*/data=0X00;/*待显示的寄存器赋初值*/*键服务子程序*/voidKEYSERVE()PORTB=0XFD;if(RB5=0)j=0X01;if(RB4=0)j=0X03;PORTB=0XFB;if(RB5=0)j=0X02;if(RB4=0)j=0X04;/*以上通过逐行逐列扫描,以确定是何键按下*/PORTB=0X00;/*恢复PORTB的值*/*软件延时子程序*/void DELAY()for(i = 6553; -i ;)continue;/*SPI发送子程序*/v

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号