久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3938|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

PIC32數(shù)碼管程序?qū)嵗?/span>

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:99624 發(fā)表于 2015-12-25 04:18 | 只看該作者 回帖獎勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include
  2. #pragma config JTAGEN =OFF
  3. char   Led[]={0x42, 0xf3, 0x86, 0xa2, 0x33, 0x2a, 0x0a, 0xf2, 0x02, 0x22, 0x40, 0xf1, 0x84, 0xa0, 0x31, 0x28, 0x08, 0xf0, 0x00, 0x20, 0x1e, 0x0e, 0x0f, 0xbf, 0x23, 0x9b, 0x8b};
  4. //led字庫

  5. void spiout(char image[],int len)
  6. {
  7.     int i;
  8. PORTClearBits(IOPORT_B, BIT_9);
  9.     for (i = 0; i < len; i++)
  10.         {
  11.             SpiChnPutC(2, image[i]);
  12.         }

  13. for(i=0;i<2;i++);//延時(shí)使數(shù)據(jù)傳輸完后鎖存,通常數(shù)碼管亂碼都是這導(dǎo)致的。
  14. PORTSetBits(IOPORT_B, BIT_9);//數(shù)據(jù)鎖存
  15. }
  16. int main()
  17. {
  18. SpiOpenFlags oFlags = SPI_OPEN_MSTEN | SPI_OPEN_CKP_HIGH | SPI_OPEN_MODE8 | SPI_OPEN_ON;//作為主機(jī), ,8位數(shù)據(jù)模式,SPI使能
  19. PORTSetPinsDigitalOut(IOPORT_B, BIT_9);//外部移位寄存器數(shù)據(jù)鎖存,1鎖存,0開放
  20. SpiChnOpen(2, oFlags, 6);//打開通道2即SDO2,配置SPI,fpbDiv(2~1024).波特率BR=Fpb/fpbDiv
  21. PPSOutput(2, RPB8, SDO2);//輸出針腳組2中,查表將針腳RPB8,作為數(shù)據(jù)輸出2口SDO2.實(shí)際連線也是如此
  22. spiout(Led,4);
  23. }



  24. //PPSOutput(2,RPB5,SDO1);//輸出針腳組2中,查表將針腳RPB5,作為數(shù)據(jù)輸出1口SDO1.

  25. //也可查數(shù)據(jù)手冊用另一種,以后再說

  26. //查找頭文件PPSOUT.h在C:\Program Files (x86)\Microchip\xc32\v1.21\pic32-libs\include\peripheral
  27. {

  28.                                         Output Pin Group 2
  29. #define OUT_PIN_PPS2_RPA1        RPA1Rbits.RPA1R
  30. #define OUT_PIN_PPS2_RPB5        RPB5Rbits.RPB5R
  31. #define OUT_PIN_PPS2_RPB1        RPB1Rbits.RPB1R
  32. #define OUT_PIN_PPS2_RPB11       RPB11Rbits.RPB11R
  33. #define OUT_PIN_PPS2_RPB8        RPB8Rbits.RPB8R
  34. #define OUT_PIN_PPS2_RPA8        RPA8Rbits.RPA8R
  35. #define OUT_PIN_PPS2_RPC8        RPC8Rbits.RPC8R
  36. #define OUT_PIN_PPS2_RPA9        RPA9Rbits.RPA9R

  37. //#define OUT_FN_PPS2_SDO1         3  // RPn tied to SDO1
  38. //#define OUT_FN_PPS2_SDO2         4  // RPn tied to SDO2
  39. //#define OUT_FN_PPS2_OC2           5  // RPn tied to OC2
  40. }



  41. 秒表

  42. #include
  43. #pragma config JTAGEN=OFF
  44. #pragma config FPLLIDIV = DIV_2         //振蕩器配置
  45. #pragma config FPLLMUL = MUL_24
  46. #pragma config FPLLODIV = DIV_2
  47. #pragma config FNOSC = FRCPLL         
  48. #pragma config FPBDIV = DIV_1           //8MHZ/2*24/2/1=48MHZ
  49. #pragma config FWDTEN = OFF
  50. #pragma POSCMOD = OFF
  51. #define PERIOD 48000                    //t=ps*period/48000000=0.001s
  52. int n=0,sta=0,ledflag=1,butflag=0,i=0,b=0,bit1=0,bit2=0;;
  53. char   t[4],Led[]={0x42, 0xf3, 0x86, 0xa2, 0x33, 0x2a, 0x0a, 0xf2, 0x02, 0x22, 0x40, 0xf1, 0x84, 0xa0, 0x31, 0x28, 0x08, 0xf0, 0x00, 0x20, 0x1e, 0x0e, 0x0f, 0xbf, 0x23, 0x9b, 0x8b},image[]={0x42,0x42,0x42,0x42};
  54. //Led 字庫

  55. void timer1init()//時(shí)鐘源1初始化,配置中斷等
  56. {
  57. OpenTimer1(T1_ON|T1_SOURCE_INT|T1_PS_1_1,PERIOD);
  58. ConfigIntTimer1(T1_INT_ON|T1_INT_PRIOR_2|T1_INT_SUB_PRIOR_0);
  59. INTEnableSystemMultiVectoredInt();
  60. }
  61. void spiinit()//SPI初始化
  62. {
  63. SpiOpenFlags oFlags = SPI_OPEN_MSTEN | SPI_OPEN_CKP_HIGH | SPI_OPEN_MODE8 | SPI_OPEN_ON;//作為主機(jī),,8位數(shù)據(jù)模式,SPI使能
  64. SpiChnOpen(2, oFlags, 6);//打開通道2即SDO2,配置SPI,fpbDiv(2~1024).波特率BR=Fpb/fpbDiv
  65. PPSOutput(2, RPB8, SDO2);//輸出針腳組2中,查表將針腳RPB8,作為數(shù)據(jù)輸出2口SDO2.實(shí)際連線也是如此
  66. PORTSetPinsDigitalOut(IOPORT_B,BIT_9);//外部移位寄存器SLCK數(shù)據(jù)鎖存,1鎖存,0開放
  67. PORTSetBits(IOPORT_B, BIT_9);//先置一鎖存數(shù)據(jù)
  68. }
  69. void __ISR(_TIMER_1_VECTOR,ipl2) timer(void)//中斷函數(shù)0.001s一次中斷
  70. {
  71.   INTClearFlag(INT_T1);
  72.   n++;
  73.   if(n>100)//0.1s
  74.   {
  75.       n=0;
  76.       ledflag=1;
  77. //      PORTBINV=(1<<7);    RB7口led燈與按鍵AN1的RA0并聯(lián)沖突,不能同時(shí)使用
  78.   }

  79. }

  80. void buttoninit()//按鍵初始化
  81. {
  82. //    ANSELAbits.ANSA0 = 0; //Button1
  83. //    ANSELAbits.ANSA1 = 0; //Button2

  84. PORTSetPinsDigitalIn(IOPORT_A,BIT_0|BIT_1);//按鍵電位檢測讀數(shù)據(jù)
  85. PORTSetPinsDigitalIn(IOPORT_B,BIT_3|BIT_14);//需將對應(yīng)的按鍵針腳位設(shè)為數(shù)字輸入

  86. }

  87. void spiout(char im[])//SPI數(shù)據(jù)輸出函數(shù)
  88. {
  89.   PORTClearBits(IOPORT_B, BIT_9);
  90. for(i=0;i<4;i++)
  91. {
  92. SpiChnPutC(2,im[i]);//2號通道依次傳輸數(shù)據(jù)
  93. }
  94.   for(i=0;i<2;i++);//延時(shí)使數(shù)據(jù)傳輸完后鎖存,通常數(shù)碼管亂碼都是這導(dǎo)致的。
  95. PORTSetBits(IOPORT_B, BIT_9);//數(shù)據(jù)鎖存
  96. }

  97. void led(char imag[3])//秒表換算函數(shù)
  98. {
  99.    t[0]++;
  100.    if(t[0]>9)
  101.    {
  102.    t[0]=0;
  103.    t[1]++;
  104.    if(t[1]>19)
  105.    {
  106.    t[1]=10;
  107.    t[2]++;
  108.    if(t[2]>9)
  109.    {
  110.    t[2]=0;
  111.    t[3]++;
  112.   if(t[3]>9)
  113.    t[3]=0;
  114.    }
  115.    }
  116. }
  117. image[0]=Led[t[3]];
  118. image[1]=Led[t[2]];
  119. image[2]=Led[t[1]];
  120. image[3]=Led[t[0]];
  121. spiout(image); //四個(gè)數(shù)據(jù)相互變換
  122. }



  123. void main()//主函數(shù)
  124. {

  125.     timer1init();
  126.     spiinit();
  127.     buttoninit();


  128. PORTSetPinsDigitalOut(IOPORT_B,BIT_13);
  129. PORTSetBits(IOPORT_B,BIT_13);
  130. while(1)//死循環(huán)檢測按鍵狀態(tài)和不斷投影數(shù)碼管
  131. {

  132. if(PORTAbits.RA0==0)
  133. {
  134. bit1++;
  135. if(bit1==5)//防止按鍵顫動,一種狀態(tài)只運(yùn)行一次(非常巧妙)
  136. {
  137.      sta=0;
  138. PORTBINV=(1<<13);
  139. }
  140. }
  141. else bit1=0;
  142. if(PORTAbits.RA1==0)
  143. {
  144.     bit2++;
  145.     if(bit2==5)//防止按鍵顫動,一種狀態(tài)只運(yùn)行一次(非常巧妙)
  146.     {
  147.     if(sta==1)
  148.      sta=2;
  149.     else
  150.      sta=1;
  151.     }
  152. }
  153. else bit2=0;
  154. switch(sta)//不同狀態(tài)運(yùn)行不同函數(shù)
  155. {
  156.      case 0:
  157. for(i=0;i<4;i++)
  158. t[i]=0;
  159. t[1]=10;
  160. image[0]=Led[t[3]];
  161. image[1]=Led[t[2]];
  162. image[2]=Led[t[1]];
  163. image[3]=Led[t[0]];
  164. spiout(image);break;   //初始化重置數(shù)碼管
  165.      case 1:
  166.          if(ledflag==1)
  167.          {
  168.              ledflag=0;
  169.              led(image);
  170.          }
  171.          break;        //秒表開始
  172.      case 2:
  173.          break;        //暫停
  174. }


  175. }

  176. }


  177. //  }



復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 香蕉成人网 | 美丽的姑娘观看在线播放 | 免费不卡视频 | 狠狠干免费视频 | 欧美日韩国产中文 | 超碰在线观看免费 | 黄色免费大片 | 一级片在线视频 | 国产精品福利一区 | 久久久久久一区 | 超碰成人福利 | 免费看黄色aaaaaa 片 | 成人激情视频网 | 亚洲精品麻豆 | 五月婷婷激情网 | 三级免费观看 | 国产精品久久久国产盗摄 | 日韩免费高清 | 日韩欧美精品在线 | 国产二区三区 | 狠狠做深爱婷婷综合一区 | 天天插天天透 | 夜夜嗨av一区二区三区网页 | 久久国产精品99久久人人澡 | 亚洲伦理视频 | www欧美 | 国产色网站 | www.毛片.com | 不卡的av网站 | 国产精品1区2区 | 午夜影院黄 | 国产精品一级二级 | 黄色大片av| 久久狠| 久久免费精品 | 色婷婷香蕉在线一区二区 | 国产欧美日韩在线观看 | 成人在线观看网址 | 国产精品久久久久久99 | 欧美一级片免费看 | 亚洲视频一区二区三区四区 |