登录  | 立即注册

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

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 中断与数码管显示

[复制链接]
发表于 2022-1-28 21:32:29 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 单片机
开始时间: 2022-01-27
结束时间: 2022-01-28
#include<reg52.h>

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

unsigned char code LedChar[]=(
          0xc0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
    0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
    );
unsigned char LedBuff[6]={
           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=1; ADDR0=0; i++; P0=LedBuff[4];}
                                                        else if(i == 5)
                                                        {ADDR2=1; ADDR1=0; ADDR0=1; i=0; P0=LedBuff[5];}
                                        }
                 }
}               
#include<reg52.h>

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

unsigned char code LedChar[]=(
          0xc0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
    0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
    );
unsigned char LedBuff[6]={
           0xFF, 0xFF, 0xFF, 0xFF, 0xFF
     };

unsigned char flag1s = 0;
unsigned int cnt = 0;       
unsigned char i = 0;                 
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;
           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++; P0=LedBuff[0];break;
                          case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=LedBuff[1];break;
                          case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=LedBuff[2];break;
                          case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=LedBuff[3];break;
                           case 4: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=LedBuff[4];break;
                          case 5: ADDR2=1; ADDR1=0; ADDR0=0; i=0; P0=LedBuff[5];break;
                          default:break;
           }
}

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

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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