找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2170|回復: 0
收起左側

數(shù)碼管從0到300之后顯示HELLO

[復制鏈接]
ID:155121 發(fā)表于 2016-12-15 22:25 | 顯示全部樓層 |閱讀模式
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit dula = P2^6;
sbit wela = P2^7;


uchar table[] = {
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x38,0x3F,0
};


uchar bai,shi,ge;//顯示百十個的變量
uchar x,y;//加上HELLO
uchar shijian1,shijian2;//兩個定時器的變量
//uchar flag1,flag2;//分別控制定時器0和1的flag
uint number = 300;//初始時間
uchar flag = 1;

void init()//初始化函數(shù)
{
   TMOD = 0x11;
   TH0 = (65536 - 45872)/256;
   TL0 = (65536 - 45872)%256;
   TH1 = (65536 - 45872)/256;
   TL1 = (65536 - 45872)%256;
   EA = 1;             //開啟總中斷
   ET0 = 1;                //開啟定時器0的中斷
   ET1 = 1;                //開啟定時器1的中斷
   TR0 = 1;                //啟動定時器0
   TR1 = 0;                //定時器1
}

void delayms(uint xms)
{
     uint i,j;
         for(i = xms ; i > 0 ;i--)
             for(j = 110 ;  j > 0 ;j--);         
}

void display(uchar bai, uchar shi, uchar ge, uchar x , uchar y)
{
   dula = 1;
   P0 = table[bai];
   dula = 0;
   P0 = 0xff;
   wela = 1;
   P0 = 0xfe;
   wela = 0;
   delayms(1);

   dula = 1;
   P0 = table[shi];
   dula = 0;
   P0 = 0xff;
   wela = 1;
   P0 = 0xfd;
   wela = 0;
   delayms(1);

   dula = 1;
   P0 = table[ge];
   dula = 0;
   P0 = 0xff;
   wela = 1;
   P0 = 0xfb;
   wela = 0;
   delayms(1);

   dula = 1;
   P0 = table[x];
   dula = 0;
   P0 = 0xff;
   wela = 1;
   P0 = 0xf7;
   wela = 0;
   delayms(1);

   dula = 1;
   P0 = table[y];
   dula = 0;
   P0 = 0xff;
   wela = 1;
   P0 = 0xef;
   wela = 0;
   delayms(1);
}

void main()
{
    init();
        while(1)
        {
             if(flag==1)
                 {
             display(bai,shi,ge,21,21);
                 }
                 else
                 {
                 display(16,17,18,19,20); //顯示HELLO
                 }
        }
}

void time1() interrupt 1//控制數(shù)碼管顯示百十個倒計時
{
    TH0=(65536 - 45872)/256;
        TL0=(65536 - 45872)%256;

        shijian1++;

if(flag=1)
{
        if(shijian1 == 2)
        {
            shijian1=0;
                number--;

                bai=number/100;//開始分離
                shi=number%100/10;
                ge=number%10;

                if(number==0)                  
                {
                  TR0 = 0;
                  TR1 = 1;
                  flag = 0;
                }
        }
}
                
}

void time2() interrupt 3
{
   TH1 = (65536 - 45872)/256;
   TL1 = (65536 - 45872)%256;
   shijian2++;

if(flag=0)
{  
   if(shijian2 == 20)
   {
       shijian2=0;
           TR1=~TR1;
   }
}

}

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

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