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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3581|回復: 6
打印 上一主題 下一主題
收起左側

單片機倒計時程序增加功能請教

[復制鏈接]
跳轉到指定樓層
樓主
ID:301791 發表于 2018-11-11 08:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛接觸單片機,現在實在沒有獨立寫程序的能力,僅僅剛入門,所以只能在拿老師們的程序練習,現有問題請教各位老師:
下面這個程序,原來是999分鐘倒計時,現在被我改成99分鐘了,增加了暫停功能,暫停不影響繼電器,繼電器要在倒計時結束后才斷電.
現在想添加兩只led做指示,led1在計時開始的時候閃一下,(約0.5秒)led2在計時結束時閃一下(約0.5秒)或者在最后一分種的時候閃一下(約0.5秒)。請問老師們這該怎么改呢?先謝謝各位老師們了。
單片機源程序:
  1. //#include<reg52.h>
  2. #include<STC12C2052AD.h>          //庫文件
  3. #include<intrins.h>
  4. #define uchar unsigned char //宏定義字符型變量
  5. #define uint  unsigned int //宏定義整型變量
  6. /*聲明 SFR 相關 與 的 IAP*/
  7. sfr IAP_DATA = 0xE2;
  8. sfr IAP_ADDRH = 0xE3;
  9. sfr IAP_ADDRL = 0xE4;
  10. sfr IAP_CMD = 0xE5;
  11. sfr IAP_TRIG = 0xE6;
  12. sfr IAP_CONTR = 0xE7;

  13. /********************************************************************
  14.                              IO口定義
  15. ********************************************************************/
  16. uchar s1=0;
  17. bit  write=0;
  18. uint txian,dxian;
  19. uchar txian1,txian2;
  20. uchar dxian1,dxian2;
  21. uchar T0RH=0,T0RL=0;
  22. uint ms=0;
  23. uchar A1,A2;
  24. uchar B1,B2;
  25. uchar C1,C2;
  26. uchar D1,D2;
  27. bit bz1=0;
  28. bit bz2=0;
  29. sbit P10=P1^0;//數碼管段
  30. sbit P11=P1^1;//數碼管段
  31. sbit P12=P1^2;//數碼管段
  32. sbit P13=P1^3;//數碼管段
  33. sbit P14=P1^4;//數碼管段
  34. sbit P15=P1^5;//數碼管段
  35. sbit P16=P1^6;//數碼管段
  36. sbit AIN1=P1^7;//信號輸入
  37. sbit P30=P3^0;//按鍵輸入
  38. sbit P31=P3^1;//按鍵輸入
  39. sbit P32=P3^2;//數碼管位
  40. sbit P33=P3^3;//數碼管位
  41. sbit LED1=P3^4;//?
  42. sbit LED2=P3^5;//?
  43. sbit OUT1=P3^7;//繼電器輸出
  44. bit ts=1;     //
  45. bit yxbz=0;   //
  46. uint xianshi;
  47. /********************************************************************
  48.                             定義 ISP/IAP/EEPROM 命令
  49. *********************************************************************/
  50. #define CMD_IDLE 0
  51. #define CMD_READ 1
  52. #define CMD_PROGRAM 2
  53. #define CMD_ERASE 3
  54. #define ENABLE_IAP 0x83//SYSCLK<12MH
  55. #define IAP_ADDRESS 0x0000//存儲地址

  56. /********************************************************************
  57. 禁用 ISP/IAP/EEPROM functionmake 單片機 在 一 安全 狀態
  58. *********************************************************************/
  59. void IapIdle()
  60. {
  61.   IAP_CONTR = 0;    //
  62. IAP_CMD = 0;    //
  63. IAP_TRIG = 0;    //
  64. IAP_ADDRH = 0x80;  //
  65. IAP_ADDRL = 0;    //
  66. }
  67. /********************************************************************
  68.                              讀數據
  69. *********************************************************************/
  70. uchar IapReadByte(uint addr)
  71. {
  72.    uchar dat;
  73.    IAP_CONTR = ENABLE_IAP;
  74.    IAP_CMD = CMD_READ;
  75.    IAP_ADDRL = addr;
  76.    IAP_ADDRH = addr >> 8;
  77.    IAP_TRIG = 0x46;
  78.    IAP_TRIG = 0xb9;
  79.    _nop_();
  80.    dat = IAP_DATA;
  81.    IapIdle();
  82.    return dat;
  83. }
  84. /********************************************************************
  85.                                寫數據
  86. *********************************************************************/
  87. void IapProgramByte(uint addr, uchar dat)
  88. {
  89.    IAP_CONTR = ENABLE_IAP;
  90.    IAP_CMD = CMD_PROGRAM;
  91.    IAP_ADDRL = addr;
  92.    IAP_ADDRH = addr >> 8;
  93.    IAP_DATA = dat;
  94.    IAP_TRIG = 0x46;
  95.    IAP_TRIG = 0xb9;
  96.    _nop_();
  97.    IapIdle();
  98. }
  99. /********************************************************************
  100.                                擦除數據
  101. *********************************************************************/
  102. void IapEraseSector(uint addr)
  103. {
  104.    IAP_CONTR = ENABLE_IAP;
  105.    IAP_CMD = CMD_ERASE;
  106.    IAP_ADDRL = addr;
  107.    IAP_ADDRH = addr >> 8;
  108.    IAP_TRIG = 0x46;
  109.    IAP_TRIG = 0xb9;
  110.    _nop_();
  111.    IapIdle();
  112. }
  113. /********************************************************************
  114.                             初始定義
  115. *********************************************************************/
  116. code uchar seg7code[10]={0xfB,0x89,0xf5,0xdD,0x8F,0xdE,0xfE,0xc9,0xfF,0xdF}; //顯示段碼 數碼管字跟
  117. /********************************************************************
  118.                             延時函數
  119. *********************************************************************/
  120. void delay(uchar t)
  121. {
  122.   uchar i,j;
  123.    for(i=0;i<t;i++)
  124.    {
  125.      for(j=130;j>0;j--);
  126.   { ;
  127.   }
  128.    }
  129. }
  130. /********************************************************************
  131.                             顯示函數 接通時間
  132. *********************************************************************/        
  133. //void tong(uchar tdate) //顯示函數
  134. void tong() //顯示函數
  135. {
  136.     C1=txian%100/10;
  137.    C2=txian%10;
  138.    P32=1;P33=1;  
  139.     P1=seg7code[C1];
  140.    P32=0;P33=1;
  141.    delay(80);
  142.    P32=1;P33=1;  
  143.     P1=seg7code[C2];
  144.    P32=1;P33=0;
  145.    delay(80);

  146. }
  147.    
  148. void key()
  149. {
  150.    if(P30==0)
  151.    {
  152.    delay(80);
  153.    if(P30==0)
  154.    {
  155.    s1++;
  156.    if(s1>=4){s1=0;}
  157.    while(!P30);
  158.    }
  159. }}

  160. //定時器0初始化
  161. void t0_init(unsigned char ms0)    //ms0最大71
  162. {
  163. /***********************************************
  164. 一個機器周期=12*時鐘周期。
  165. 11059200為時鐘周期,一共為11059200/12=921600,就是每秒為921600Hz,
  166.     八位定時器 最大計時     0.2777778ms
  167. 十六位定時器最大計時   71.111111ms
  168. 11.0592MHz除12為921600Hz,就是一秒921600次機器周期,10ms=9216次機器周期。
  169.   65536-9216=56320(dc00)
  170.   TH0=0xdc,TL0=0x00
  171. ***********************************************/
  172.   long tmp;  //臨時變量
  173.    tmp = 11059200 / 12;
  174.   tmp = (tmp * ms0) / 1000;
  175.   tmp = 65536 - tmp;
  176.   tmp = tmp + 3;
  177.   T0RH = (unsigned char)(tmp>>8);
  178.   T0RL = (unsigned char)tmp;        
  179.    TMOD &=0XF0;
  180.   TMOD |=0X01;  //方式一  一共四種方式   GATE0 C/T0  M0_1  M0_0  C/T0選擇時鐘計數還是外部計數  方式0是十三位定時器 ,方式1是十六位定時器,方式2是八位自動 方式4是兩個八位
  181.   TH0=T0RH;
  182.   TL0=T0RL;
  183.   ET0=1;   //使能T0中斷
  184.   EA=1;
  185.   TR0=1;
  186. }
  187. /********************************************************************
  188.                                主函數
  189. *********************************************************************/
  190. void main()
  191. {   
  192.   unsigned char flag=1,flag2=0;;
  193. txian1 = IapReadByte(0x01);  //讀取0x01中的數據  并附給ca
  194. txian2 = IapReadByte(0x02);  //讀取0x01中的數據  并附給ca
  195. t0_init(10);
  196. P1M0=0X00;P1M1=0X7f;
  197. txian=txian1*10+txian2;
  198. xianshi=txian;
  199. OUT1=1;
  200. //ts=0;bz1=1;ms=0;OUT1=0;
  201. while(1)
  202. {
  203.     key();
  204.    if((AIN1==0)&&(bz1==0)&&(ts==0)){delay(80);
  205.   if(AIN1==0){bz1=1;yxbz=!yxbz;}}
  206.    if((AIN1==0)&&(bz1==0)&&(ts==1)){delay(80);
  207.   if(AIN1==0){yxbz=1;ts=0;bz1=1;ms=0;OUT1=0;}}
  208.    if((AIN1==1)&&(bz1==1)){bz1=0;}
  209.     if(write==1)
  210.    {
  211.     TR0=0;                              
  212.      write=0;
  213.      IapEraseSector(0);
  214.      IapProgramByte(0x01,txian1);
  215.      IapProgramByte(0x02,txian2);
  216.     TR0=1;
  217.     xianshi=txian;
  218.   }
  219. }   
  220. }
  221. void t0(void) interrupt 1 using 0 //定時中斷服務函數
  222. {
  223.    TH0=T0RH;
  224.    TL0=T0RL;
  225.       switch (s1){
  226.     case 0: tong();break;
  227.     case 1:ts=1;P1=seg7code[A1];P32=0;P33=1;if(P31==0){A1++;if(A1>9)A1=0;while(!P31);}break;
  228.      case 2:     P1=seg7code[A2];P32=1;P33=0;if(P31==0){A2++;if(A2>9)A2=0;while(!P31);}break;
  229.     case 3:     txian1=A1;txian2=A2;txian=txian1*10+txian2;write=1;break;
  230.     default: break;
  231.   }
  232. if(yxbz==1)
  233. {
  234. ms++;
  235. if(ms==4800)  //ms=80是1秒
  236. {
  237. ms=0;
  238. if(ts==0){txian--;if(txian<=0){bz1=0;OUT1=1;txian=txian1*10+txian2;ts=1;}}
  239. }
  240. }

  241. }
復制代碼


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

使用道具 舉報

沙發
ID:111634 發表于 2018-11-11 19:37 | 只看該作者
本帖最后由 zl2168 于 2018-11-11 21:13 編輯

實例93  99.9秒秒表  
Proteus仿真一下,確認有效。
實例95 99.9秒秒表.rar (38.86 KB, 下載次數: 6)

實例96  能預置初值的倒計時秒表
實例96 能設置初值的倒計時秒表.rar (40 KB, 下載次數: 8)

以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1內有常用的單片機應用100案例,用于仿真實驗操作,書中電路和程序設計有詳細說明,電路與程序真實可靠可信可行,程序語句條條有注解。若需99.99秒,硬件電路增加一位595。軟件程序增加0.01s10ms計數器,并修改相應計數顯示程序。
回復

使用道具 舉報

板凳
ID:301791 發表于 2018-11-13 08:29 | 只看該作者
大神們提示一下也是好的,折騰了一晚上,只能折騰到開始計時亮,一分鐘時間亮,計時完畢亮,就是還沒弄成閃一下.
回復

使用道具 舉報

地板
ID:213173 發表于 2018-11-13 15:54 | 只看該作者
聲明兩個全局位變量,分別用在計時開始和結束語句位置 置1
bit a=0,b=0;
void LED_Twinkle()//此函數放在主函數中調用
{
        static uint i=0,j=0;
        if(a==1)
        {       
                LED1=0;
                if(i++==10000)
                {
                        i=0;
                        a=0;
                        LED1=1;
                }
        }
        if(b==1)
        {       
                LED2=0;
                if(j++==10000)
                {
                        j=0;
                        b=0;
                        LED2=1;
                }
        }
}
回復

使用道具 舉報

5#
ID:301791 發表于 2018-11-13 21:37 | 只看該作者
wulin 發表于 2018-11-13 15:54
聲明兩個全局位變量,分別用在計時開始和結束語句位置 置1
bit a=0,b=0;
void LED_Twinkle()//此函數放在 ...

謝謝老師指點.
回復

使用道具 舉報

6#
ID:301791 發表于 2018-11-14 14:09 | 只看該作者

最后,還是用了自己的理解方式實現,這個程序還有小bug,但不影響玩。
剛好雙十一圖書對折,買了幾本,估計這幾天就能到了。
這個倒計時折騰了許久了,基本啃明白了,學習單片機就得死磕自己,慢慢來。
發這個帖子的時候一下沒轉過彎來。


IMG_8638.rar

608.8 KB, 下載次數: 5

回復

使用道具 舉報

7#
ID:301791 發表于 2018-11-15 10:22 | 只看該作者
折騰了一上午,把數碼管的管腳改了io口,小小修改了下程序。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级a爱片性色毛片免费 | 成人在线 | 在线观看欧美一区 | 青青草社区 | av免费在线观看网站 | 日本黄色影片在线观看 | h片在线观看网站 | 最新国产精品精品视频 | 日韩视频福利 | 九九精品在线 | 91资源在线观看 | 久久久一区二区三区四区 | 中文字幕第一页在线 | a在线视频| 亚洲综合色视频在线观看 | 日本一区二区三区免费观看 | 国产av毛片 | 欧美日在线 | 亚洲视频在线一区 | 日韩和的一区二区 | 成人区精品一区二区婷婷 | 特级黄一级播放 | 麻豆久久久久久久 | 国产精品成人在线 | 成人午夜精品一区二区三区 | 啪啪av| 亚洲免费精品 | 国产精品久久久久久久岛一牛影视 | 色www精品视频在线观看 | 欧美一区永久视频免费观看 | 欧美激情视频一区二区三区在线播放 | 国产成人99久久亚洲综合精品 | 日韩成人在线播放 | 亚洲一区二区三区四区五区中文 | 亚洲高清视频在线观看 | 福利久久| 欧美日韩三级 | 国产亚洲精品综合一区 | 日韩精品视频一区二区三区 | 一区二区三区免费观看 | 国产精品乱码一二三区的特点 |