登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 中断和动态数码管

[复制链接]
发表于 2021-2-3 16:35:55 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 51开发板
学习安排: 中断和动态数码管
开始时间: 2021-02-03
结束时间: 2021-02-03
学习了51开发板动态数码管和中断有两种方式
1.#include<STC12C5A60S2.H>


sbit ADDR0 = P2^0;
sbit ADDR1 = P2^1;
sbit ADDR2 = P2^2;
sbit ADDR3 = P2^3;
sbit ENLED = P1^1;

unsigned char code LedChar[]={
        0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
        0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8F,
  };
unsigned char LedBuff [6]={
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
  };
unsigned char flag1s = 0;
unsigned int cnt = 0;
unsigned char i = 0;
void main()
{
        unsigned long sec = 0;
        ENLED = 0;
        ADDR3 = 1;
        TMOD = 0x01;
        TH0 = 0xFC;
        TL0 = 0x67;
        TR0 = 1;
        EA = 1;
        ET0 = 1;
       
        while(1)
        {
                if (flag1s == 1)
                        {
                                flag1s = 0;
                                sec++;
                                LedBuff[0] = LedChar[sec%10];
                                LedBuff[1] = LedChar[sec/10%10];
                                LedBuff[2] = LedChar[sec/100%10];
                                LedBuff[3] = LedChar[sec/1000%10];
                                LedBuff[4] = LedChar[sec/10000%10];
                                LedBuff[5] = LedChar[sec/100000%10];
                        }
                       
                       
        }
}
void InterruptTime0() interrupt 1
{
        TH0=0xFC;
        TL0=0x67;
        cnt++;
        if (cnt>=1000)
        {
                cnt=0;
                flag1s=1;
        }
       
        P0=0xFF;
                        switch(i)
                        {
                                case 0: ADDR2=0;ADDR1=0;ADDR0=0;i++0=LedBuff[0];break;
                          case 1: ADDR2=0;ADDR1=0;ADDR0=1;i++0=LedBuff[1];break;
                                case 2: ADDR2=0;ADDR1=1;ADDR0=0;i++0=LedBuff[2];break;
                                case 3: ADDR2=0;ADDR1=1;ADDR0=1;i++0=LedBuff[3];break;
                                case 4: ADDR2=1;ADDR1=0;ADDR0=0;i++0=LedBuff[4];break;
                                case 5: ADDR2=1;ADDR1=0;ADDR0=1;i=00=LedBuff[5];break;
                                defult :break;
                        }
}
               
        2.
#include<STC12C5A60S2.H>


sbit ADDR0 = P2^0;
sbit ADDR1 = P2^1;
sbit ADDR2 = P2^2;
sbit ADDR3 = P2^3;
sbit ENLED = P1^1;

unsigned char code LedChar[]={
        0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
        0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8F,
  };
unsigned char LedBuff [6]={
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
  };
void main()
{
        unsigned int cnt = 0;
        unsigned long sec = 0;
        unsigned char i = 0;
        ENLED = 0;
        ADDR3 = 1;
        TMOD = 0x01;
        TH0 = 0xFC;
        TL0 = 0x67;
        TR0 = 1;
       
        while(1)
        {
                if(TF0 == 1)
                {
                        TF0 = 0;
                        TH0 = 0xFC;
                        TL0 = 0x67;
                        cnt++;
                        if (cnt>=1000)
                        {
                                cnt = 0;
                                sec++;
                                LedBuff[0] = LedChar[sec%10];
                                LedBuff[1] = LedChar[sec/10%10];
                                LedBuff[2] = LedChar[sec/100%10];
                                LedBuff[3] = LedChar[sec/1000%10];
                                LedBuff[4] = LedChar[sec/10000%10];
                                LedBuff[5] = LedChar[sec/100000%10];
                        }
                       
                        if(i ==0)
                        {ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0];}
                        else if(i ==1)
                        {ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=LedBuff[1];}
                        else if(i ==2)
                        {ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=LedBuff[2];}
                        else if(i ==3)
                        {ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=LedBuff[3];}
                        else if(i ==4)
                        {ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=LedBuff[4];}
                        else if(i ==5)
                        {ADDR2=1; ADDR1=0; ADDR0=1; i=0; P0=LedBuff[5];}
                }
        }
}
               
       

好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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