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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機每隔1秒計數加1,數碼管顯示 程序

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
  1. #include"reg52.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. /*****數碼管位選****/
  5. sbit SMG_A = P2^2;
  6. sbit SMG_B = P2^3;
  7. sbit SMG_C = P2^4;

  8. /****數碼管碼表****/
  9. uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9

  10. /****函數聲明*****/
  11. void Delay(uchar x);
  12. void Display_SMG();
  13. void Init();

  14. uchar count = 0;//計數20,T = 20*50ms = 1s
  15. int number = 0;

  16. /*****主函數*****/
  17. void main()
  18. {
  19.   Init();
  20.   while(1)
  21.   {
  22.           Display_SMG();  
  23.   }
  24. }

  25. /******初始化函數********/
  26. void Init()
  27. {
  28.         TMOD = 0x01;//定時器0,方式1
  29.         TH0 = (65536 - 46080)/256;//裝初值,延時50ms
  30.         TL0 = (65536 - 46080)%256;
  31.         EA = 1;//開總中斷
  32.         ET0 = 1;//開定時器中斷
  33.         TR0 = 1;//啟動定時器0         
  34. }

  35. /********數碼管顯示函數***********/
  36. void Display_SMG()
  37. {
  38.         uchar ge,shi,bai,qian;
  39.         qian = number / 1000;
  40.         bai = (number / 100)%10;
  41.         shi = (number / 10)%10;
  42.         ge = number % 10;
  43.         
  44.         //*****數碼管顯示個位******
  45.         SMG_A = 0;
  46.         SMG_B = 0;
  47.         SMG_C = 0;
  48.         P0 = table[ge];        
  49.         Delay(10);        

  50.         //*****數碼管顯示十位******
  51.         SMG_A = 1;
  52.         SMG_B = 0;
  53.         SMG_C = 0;
  54.         P0 = table[shi];        
  55.         Delay(10);

  56.          //*****數碼管顯示百位******
  57.         SMG_A = 0;
  58.         SMG_B = 1;
  59.         SMG_C = 0;
  60.         P0 = table[bai];        
  61.         Delay(10);

  62.         //*****數碼管顯示千位******
  63.         SMG_A = 1;
  64.         SMG_B = 1;
  65.         SMG_C = 0;
  66.         P0 = table[qian];        
  67.         Delay(10);
  68. }

  69. /********定時器中斷函數**********/
  70. void time0() interrupt 1
  71. {
  72.         TH0 = (65536 - 46080)/256;//裝初值,延時50ms
  73.         TL0 = (65536 - 46080)%256;
  74.         count++;
  75.         if(count == 20)        //延時1s后
  76.           {
  77.                   count = 0;
  78.                 number++;
  79.                 if(number == 9999)
  80.                   {
  81.                           number = 0;
  82.                   }
  83.           }
  84. }

  85. /*********延時函數*********/
  86. void Delay(uchar x)
  87. {
  88.         uchar y,z;
  89.         for(y = 30;y > 0;y--)
  90.            for(z = x;z > 0;z--);
  91. }
復制代碼


評分

參與人數 1黑幣 +30 收起 理由
admin + 30 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:863362 發表于 2022-4-20 08:35 | 只看該作者
請問一下,初始值46080是怎么計算出來的?50毫秒不是應該就是50000嗎?
回復

使用道具 舉報

板凳
ID:514317 發表于 2022-4-20 09:16 | 只看該作者
sonique0371 發表于 2022-4-20 08:35
請問一下,初始值46080是怎么計算出來的?50毫秒不是應該就是50000嗎?

樓主使用的定時器中斷來計時的    定時器是向上累加溢出的   所以 定時=65536--基礎值
回復

使用道具 舉報

地板
ID:928284 發表于 2022-4-21 15:58 | 只看該作者
利用定時中斷掃描數碼管位顯示,可以使程序更簡單明了。
回復

使用道具 舉報

5#
ID:863362 發表于 2022-4-22 08:11 | 只看該作者
lzzasd 發表于 2022-4-20 09:16
樓主使用的定時器中斷來計時的    定時器是向上累加溢出的   所以 定時=65536--基礎值

我問的就是基礎值為什么不是50000,而是46080?
回復

使用道具 舉報

6#
ID:65369 發表于 2022-4-22 09:04 | 只看該作者
用Delay,好占用資源的,同時在定時器里面選擇不是更好,一般都是在定時器里面刷新的
回復

使用道具 舉報

7#
ID:71955 發表于 2022-4-23 12:06 | 只看該作者
本人很菜,請教下各大俠,數碼管位選為啥只有三個位?
回復

使用道具 舉報

8#
ID:1010435 發表于 2022-4-24 10:42 | 只看該作者
數碼管位選用Switch函數
回復

使用道具 舉報

9#
ID:220661 發表于 2022-4-24 15:38 | 只看該作者
sonique0371 發表于 2022-4-22 08:11
我問的就是基礎值為什么不是50000,而是46080?

void Timer0Init(void)                //50毫秒@11.0592MHz
{
        AUXR &= 0x7F;                //定時器時鐘12T模式
        TMOD &= 0xF0;                //設置定時器模式
        TL0 = 0x00;                //設置定時初始值
        TH0 = 0x4C;                //設置定時初始值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
}
回復

使用道具 舉報

10#
ID:863362 發表于 2022-4-25 08:11 | 只看該作者
gongnn 發表于 2022-4-24 15:38
void Timer0Init(void)                //50毫秒@11.0592MHz
{
        AUXR &= 0x7F;                //定時器時鐘12T模式

我也是剛搞清楚,如果是11.0592m晶振,初值就是46080,如果是12m晶振,初值就是50000
回復

使用道具 舉報

11#
ID:603753 發表于 2022-4-25 10:06 | 只看該作者
如果是11.0592m晶振,初值就是46080

晶振11.0592M:
11.0592MHz除12為921600Hz,就是一秒921600次機器周期,50ms=46080次機器周期。
65536-46080=19456(4c00)
TH0=0x4c,TL0=0x00

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线欧美视频 | 国产福利在线 | 国产精品久久久久一区二区三区 | 97视频久久 | 国产精品久久久久久久一区探花 | 性高朝久久久久久久3小时 av一区二区三区四区 | 欧美一区二不卡视频 | 久久亚洲综合 | 久久久精 | 81精品国产乱码久久久久久 | 超碰精品在线观看 | 2023亚洲天堂| 国产精品久久久久久久久久久久 | 欧美电影在线观看网站 | 成人久草| 久久久精品国产 | 国产精品99久久久精品免费观看 | 免费av手机在线观看 | 国产激情视频网 | 日日天天 | 午夜合集| 精品国产免费一区二区三区演员表 | 国产精品美女久久久久久久网站 | 国产一区二区三区在线 | 成人h动漫亚洲一区二区 | 嫩草伊人| 农村黄性色生活片 | 成人性视频免费网站 | 国产美女在线播放 | 天天av综合| 亚洲欧美日韩精品久久亚洲区 | 毛片免费视频 | 日韩a在线 | 亚洲精品乱码久久久久久9色 | 特黄一级| 亚洲国产福利视频 | 黄色三级在线播放 | 日本精品视频一区二区 | 成年人免费在线视频 | 国产日韩91| 成人av免费|