欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1541|回復: 2
收起左側

pic16F877A單片機,不知道怎樣寫倒計時,請大神指點學習方法

[復制鏈接]
ID:956815 發表于 2021-7-27 14:31 | 顯示全部樓層 |閱讀模式
如題
回復

使用道具 舉報

ID:123289 發表于 2021-7-27 17:05 | 顯示全部樓層
敢問一下,正計時會嗎?
回復

使用道具 舉報

ID:155507 發表于 2021-7-27 17:39 | 顯示全部樓層
我給你來個程序試試




  1. #include <pic.h>           //調用PIC16F87XA單片機的頭文件

  2. //根據選項,配置字應該如下所示:
  3. //__CONFIG(HS&WRTEN&WDTDIS&BOREN&PWRTDIS&UNPROTECT&DUNPROT&DEBUGDIS&LVPDIS);

  4. //實際使用中,這樣太麻煩,對于默認選項,我們將其忽略掉:
  5. __CONFIG(HS&WDTDIS&LVPDIS);

  6. //---------------------------------------
  7. //數碼管字形表,供顯示時查詢
  8. const unsigned char LED[10]=
  9. {                          //定義表格一定要使用const,這樣會做到程序存儲區中
  10.     0B00111111,            //"0"的字形表,0x3F
  11.     0B00000110,            //"1"的字形表,0x06
  12.     0B01011011,            //"2"的字形表,0x5B
  13.     0B01001111,            //"3"的字形表,0x4F
  14.     0B01100110,            //"4"的字形表,0x66
  15.     0B01101101,            //"5"的字形表,0x6D
  16.     0B01111101,            //"6"的字形表,0x7D
  17.     0B00000111,            //"7"的字形表,0x07
  18.     0B01111111,            //"8"的字形表,0x7F
  19.     0B01101111,            //"9"的字形表,0x6F
  20. };

  21. //---------------------------------------
  22. //4位數碼管相關I/O設置
  23. #define U5A  RB0           //4位數碼管單元的U5(74HC138)的A腳接在RB0口上
  24. #define U5B  RB1           //4位數碼管單元的U5(74HC138)的B腳接在RB1口上
  25. #define U5C  RB2           //4位數碼管單元的U5(74HC138)的C腳接在RB2口上
  26. //---------------------------------------


  27. void main(void)            //主函數,單片機開機后就是從這個函數開始運行
  28. {

  29.     unsigned char c=0;     //定義一個char型變量,做延時用
  30.     unsigned char d=0;     //定義一個char型變量,控制顯示位置
  31.     unsigned char e=0;     //定義一個char型變量,做延時用
  32.     unsigned int  f=9999;     //定義一個int型變量,顯示內容用,顯示內容0-9999

  33.     TRISB=0B11111000;      //初始化RB7-RB0的輸入輸出方向
  34.     TRISD=0B00000000;      //初始化RD7-RD0的輸入輸出方向
  35.     PORTB=0B00000000;      //初始化RB7-RB0的數值
  36.     PORTD=0B00000000;      //初始化RD7-RD0的數值

  37.     while(1)               //死循環,單片機初始化后,將一直運行這個死循環
  38.     {

  39.         for(c=0;c<250;c++);//做一個0-250的循環,不執行其他操作,只為延時
  40.         if(++e>200)        //做一個延時,時間到將顯示內容加1
  41.         {
  42.             e=0;           //清零,為下一次延時做準備
  43.             if(--f<=0) f=9999;//顯示內容加1,因為只有4位顯示,超過9999后歸零
  44.         }
  45.         PORTD=0;           //關一次顯示,以免顯示出鬼影
  46.         if(++d>3) d=0;     //先將d加1,然后判斷是否大于3,大于3歸零
  47.         if(d==0)           //如果d=0,顯示千位
  48.         {
  49.             U5A=0;         //U5A=0,U5B=0,U5C=0,選通數碼管的千位進行顯示
  50.             U5B=0;         //U5A=0,U5B=0,U5C=0,選通數碼管的千位進行顯示
  51.             U5C=0;         //U5A=0,U5B=0,U5C=0,選通數碼管的千位進行顯示
  52.             PORTD=LED[f/1000];       //將要顯示的f的千位提取出來查表后送顯示
  53.         }
  54.         else if(d==1)      //如果d=1,顯示百位
  55.         {
  56.             U5A=1;         //U5A=1,U5B=0,U5C=0,選通數碼管的百位進行顯示
  57.             U5B=0;         //U5A=1,U5B=0,U5C=0,選通數碼管的百位進行顯示
  58.             U5C=0;         //U5A=1,U5B=0,U5C=0,選通數碼管的百位進行顯示
  59.             PORTD=LED[(f%1000)/100]; //將要顯示的f的百位提取出來查表后送顯示
  60.         }
  61.         else if(d==2)      //如果d=2,顯示十位
  62.         {
  63.             U5A=0;         //U5A=0,U5B=1,U5C=0,選通數碼管的十位進行顯示
  64.             U5B=1;         //U5A=0,U5B=1,U5C=0,選通數碼管的十位進行顯示
  65.             U5C=0;         //U5A=0,U5B=1,U5C=0,選通數碼管的十位進行顯示
  66.             PORTD=LED[(f%100)/10];   //將要顯示的f的十位提取出來查表后送顯示
  67.         }
  68.         else if(d==3)      //如果d=3,顯示個位
  69.         {
  70.             U5A=1;         //U5A=1,U5B=1,U5C=0,選通數碼管的個位進行顯示
  71.             U5B=1;         //U5A=1,U5B=1,U5C=0,選通數碼管的個位進行顯示
  72.             U5C=0;         //U5A=1,U5B=1,U5C=0,選通數碼管的個位進行顯示
  73.             PORTD=LED[f%10];         //將要顯示的f的個位提取出來查表后送顯示
  74.         }
  75.     }
  76. }
復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表