找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1767|回复: 0
打印 上一主题 下一主题
收起左侧

数码管从0到300之后显示HELLO

[复制链接]
跳转到指定楼层
楼主
ID:155121 发表于 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()//初始化函数
{
   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//控制数码管显示百十个倒计时
{
    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;
   }
}

}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表