登录  | 立即注册

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

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 数码管的动态显示 中断

[复制链接]
发表于 2022-1-8 21:01:01 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 数码管的动态显示 中断
开始时间: 2022-01-08
结束时间: 2022-01-08
本帖最后由 房一鹏 于 2022-1-8 22:28 编辑

数码管的动态显示if语句
#include<reg52.h>

sbit ENLED = P1^1;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;

unsigned char ledchar[]={
        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
        0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,
};
unsigned char ledbuff[]={
        0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};

void main ()
{
        unsigned int cnt=0;       //最大值为1000
        unsigned long sec=0;     //最大值为999999(注:是数码管的最大显示数字)
        unsigned char i=0;        //最大值为5
        
        ENLED=0;
        TMOD=0x01;   
        TH0=0xF5;
        TL0=0x55;   
        TR0=1;
        
        while(1)
        {
                if(TF0==1)
                {
                        TF0=0;
                        TH0=0xF5;
            TL0=0x55;
                        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];
                        }
                        P0=0xFF;
                        if(i==0)
                        {P20=1; P21=0; P22=1;i++; P0=ledbuff[0];}
                        else if(i==1)
                        {P20=0; P21=0; P22=1;i++; P0=ledbuff[1];}
                        else if(i==2)
                        {P20=1; P21=1; P22=0;i++; P0=ledbuff[2];}
                        else if(i==3)
                        {P20=0; P21=1; P22=0;i++; P0=ledbuff[3];}
                        else if(i==4)
                        {P20=1; P21=0; P22=0;i++; P0=ledbuff[4];}
                        else if(i==5)
                        {P20=0; P21=0; P22=0;i=0; P0=ledbuff[5];}
                }
        }
}

switch语句
#include<reg52.h>

sbit ENLED = P1^1;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;

unsigned char ledchar[]={
        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
        0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,
};
unsigned char ledbuff[]={
        0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};

void main ()
{
        unsigned int cnt=0;      
        unsigned long sec=0;     
        unsigned char i=0;  

        ENLED=0;
        TMOD=0x01;   
        TH0=0xF5;
        TL0=0x55;    //x*12/32768000=0.001    初值=65536-x
        TR0=1;
        
        while(1)
        {
                if(TF0==1)
                {
                        TF0=0;
                        TH0=0xF5;
            TL0=0x55;
                        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];
                        }
                        switch(i)
                        {
                                case 0:
                          P20=1; P21=0; P22=1; i++; P0=ledbuff[0];break;
                                case 1:
                          P20=0; P21=0; P22=1; i++; P0=ledbuff[1];break;
                                case 2:
                          P20=1; P21=1; P22=0; i++; P0=ledbuff[2];break;
                                case 3:
                          P20=0; P21=1; P22=0; i++; P0=ledbuff[3];break;
                                case 4:
                          P20=1; P21=0; P22=0; i++; P0=ledbuff[4];break;
                                case 5:
                          P20=0; P21=0; P22=0; i=0; P0=ledbuff[5];break;
                                default: break;
                  }
                }
        }
}        

中断
#include<reg52.h>

sbit ENLED = P1^1;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;

unsigned char ledchar[]={
        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
        0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,
};
unsigned char ledbuff[]={
        0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};

unsigned int cnt=0;
unsigned char i=0;        
unsigned char flag1s=0;

void main ()
{
        unsigned long sec=0;      
        
        ENLED=0;
        TMOD=0x01;   
        TH0=0xF5;
        TL0=0x55;    //x*12/32768000=0.001    3&#245;&#214;μ=65536-x
        TR0=1;
        EA=1;
        ET0=1;
        
        while(1)
        {
//                if(TF0==1)
//                {
//                        TF0=0;
//                        TH0=0xF5;
//            TL0=0x55; //&#214;&#216;&#184;33&#245;&#214;μ
//                        cnt++;
                        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 interruptTime() interrupt 1
{
            TH0=0xF5;
            TL0=0x55;
            cnt++;
        if(cnt>=1000)
        {
                cnt=0;
                flag1s=1;
        }
        P0=0xFF;
        switch(i)
                        {
                                case 0:
                          P20=1; P21=0; P22=1;i++; P0=ledbuff[0];break;
                                case 1:
                          P20=0; P21=0; P22=1;i++; P0=ledbuff[1];break;
                                case 2:
                          P20=1; P21=1; P22=0;i++; P0=ledbuff[2];break;
                                case 3:
                          P20=0; P21=1; P22=0;i++; P0=ledbuff[3];break;
                                case 4:
                          P20=1; P21=0; P22=0;i++; P0=ledbuff[4];break;
                                case 5:
                          P20=0; P21=0; P22=0;i=0; P0=ledbuff[5];break;
                                default: break;
                  }
}

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

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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