乖女从小被C到大H文NP|人妻洗澡被强公日日澡电影|小柔被六个男人躁到早上电影|被男人吃奶跟添下面特舒服|被绑在坐桩机上抹春药BL推文

技術(shù)熱線: 4007-888-234
設(shè)計開發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力

新聞中心

提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)

PIC單片機C語言編程實例一

更新時間: 2019-01-05
閱讀量:4357


5.1.2  簡單應(yīng)用實例 

    該例用于令與PORTD口相連的8個發(fā)光二極管前4個點亮,后4個熄滅。在調(diào)試程序前,應(yīng)使與PORTD口相連的8位拔碼開關(guān)拔向相應(yīng)的位置。
例5.1   PORTD輸出 

       #include 
main()
{
       TRISD=0X00;                   /*TRISD寄存器被賦值,PORTD每一位都為輸出*/
while(1);                           /*循環(huán)執(zhí)行點亮發(fā)光二極管的語句*/
       {
              PORTD=0XF0;          /*向PORTD送數(shù)據(jù),點亮LED(由實驗?zāi)0?/
/*的設(shè)計決定相應(yīng)位置低時LED點亮)。*/
}
}

5.2.1  MSSP模塊SPI方式功能簡介 

       下面是一段簡單的SPI初始化例程,用于利用SPI工作方式輸出數(shù)據(jù)的場合。
例5.2  SPI初始化程序 

/*spi初始化子程序*/
void       SPIINIT()
{
       PIR1=0;                                   /*清除SPI中斷標志*/        
       SSPCON=0x30;                /* SSPEN=1;CKP=0 , FOSC/4 */
       SSPSTAT=0xC0;
       TRISC=0x00;                    /*SDO引腳為輸出,SCK引腳為輸出*/
} 

5.2.3  程序清單 

下面給出已經(jīng)在實驗板上調(diào)試通過的一個程序,可作為用戶編制其它程序的參考。
#include        
/*該程序用于在8個LED上依次顯示1~8等8個字符*/
static volatile int table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};
volatile    unsigned        char       data; 
#define   PORTAIT(adr,bit)  ((unsigned)(&adr)*8+(bit))       /*絕對尋址位操作指令*/
static       bit PORTA_5 @ PORTAIT(PORTA,5); 
/*spi初始化子程序*/
void        SPIINIT()
{
       PIR1=0;             
       SSPCON=0x30;                /* SSPEN=1;CKP=0 , FOSC/4 */
       SSPSTAT=0xC0;
       TRISC=0x00;                    /*SDO引腳為輸出,SCK引腳為輸出*/
}
/*系統(tǒng)各輸入輸出口初始化子程序*/
void        initial()
{
TRISA=0x00;                    /*A口設(shè)置為輸出*/
       INTCON=0x00;                /*關(guān)閉所有中斷*/
       PORTA_5=0;                            /*LACK送低電平,為鎖存做準備*/
}
/*SPI發(fā)送子程序*/
void              SPILED(int data)
{
       SSPBUF=data;                   /*啟動發(fā)送*/
       do
       {
;
       }while(SSPIF==0);            /*等待發(fā)送完畢*/
SSPIF=0;                          /*清除SSPIF標志*/
}
/*主程序*/
main()
{
       unsigned  I;
       initial();                             /*系統(tǒng)初始化*/
       SPIINIT()      ;                         /*SPI初始化*/     
      for(i=8;i>0;i--)                /*連續(xù)發(fā)送8個數(shù)據(jù)*/
      {
              data=table[i];                     /*通過數(shù)組的轉(zhuǎn)換獲得待顯示的段碼*/    
              SPILED(data);            /*發(fā)送顯示段碼顯示*/        
      }
       PORTA_5=1;                            /*最后給鎖存信號,代表顯示任務(wù)完成*/
}
5.3.3  程序清單 

      下面給出已經(jīng)在實驗板上調(diào)試通過的程序,可作為用戶編制其它程序的參考。有關(guān)顯示部分的SPI初始化,請讀者參考5.2節(jié)。
#include        
/*該程序用于按下相應(yīng)的鍵時,在第一個8段LED上顯示相應(yīng)的1~4的字符*/
#define   PORTAIT(adr,bit)  ((unsigned)(&adr)*8+(bit))       /*絕對尋址位操作指令*/
static       bit  PORTA_5  @  PORTAIT(PORTA,5); 
#define    PORTBIT(adr, bit)     ((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        int    I;
unsigned        char j;
int  data;
 /*spi初始化子程序*/
void      SPIINIT()
{
       PIR1=0;
       SSPCON=0x30; 
       SSPSTAT=0xC0;
       TRISC=0xD7;                   /*SDO引腳為輸出,SCK引腳為輸出*/
}
/*系統(tǒng)各輸入輸出口初始化子程序*/
void      initial()
{
       TRISA=0xDF;
       TRISB=0XF0;                   /*設(shè)置與鍵盤有關(guān)的各口的數(shù)據(jù)方向*/
       INTCON=0x00;                /*關(guān)閉所有中斷*/
       data=0X00;                       /*待顯示的寄存器賦初值*/
       PORTB=0X00;                  /*RB1 RB2 先送低電平*/
       j=0;
}
/*軟件延時子程序*/
void        DELAY()
{
       for(i = 6553; --i ;)
       continue;
}
/*鍵掃描子程序*/
int           KEYSCAN()
{    
while(1)
{
       if ((PORTB_5==0)||(PORTB_4==0))
       break;
}                                               /*等待有鍵按下*/
       DELAY();                         /*軟件延時*/
       if ((PORTB_5==0)||(PORTB_4==0))
              KEYSERVE();            /*如果仍有鍵按下,則調(diào)用鍵服務(wù)子程序*/
       else  j=0x00;                      /*如果為干擾,則令返回值為0*/
       return(j);
}    
/*鍵服務(wù)子程序*/
int           KEYSERVE()
{
       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;/*以上根據(jù)按下的鍵確定相應(yīng)的鍵值*/
       PORTB=0X00;                  /*恢復(fù)PORTB的值*/
while(1)
{
              if((PORTB_5==1)&&(PORTB_4==1)) break;</fon

沛县| 兴山县| 翁牛特旗| 肃宁县| 通州区| 芦山县| 腾冲县| 舒兰市| 介休市| 商城县| 陵川县| 嘉兴市| 博客| 都昌县| 郸城县| 萨迦县| 积石山| 井研县| 安西县| 通榆县| 响水县| 寿光市| 海原县| 当涂县| 福安市| 云和县| 卢氏县| 潍坊市| 澎湖县| 浦县| 宁乡县| 长汀县| 独山县| 新余市| 思茅市| 岳普湖县| 安宁市| 盐边县| 邢台县| 合肥市| 民县|