登录  | 立即注册

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

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 单片机

[复制链接]
发表于 2019-1-27 22:44:38 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 不会题的重新实践
开始时间: 2019-01-27
结束时间: 2019-01-27
#include<reg52.h>

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

unsigned char i = 0;
unsigned int cnt = 0;
unsigned char code ledchar[]={
   0xC0,0xF9,0xA4,0xB0,0x99,
   0X92,0x82,0xf8,0x80,0x90,
   };                                                                                                                        //将数据存入缓存区
unsigned char ledBuff[]={
    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
   };                                                                                                                        //配置缓存区

void main()
{

         unsigned long sec = 0;
         
         ENLED = 0;
         ADDR3 = 1;
         TMOD = 0xF0;
         TH0 = 0x7E;
         TL0 = 0x66;  //配置一毫秒定时器
         TR0 = 1;   //打开定时器
       
       
        while(1)
        {       
                if(TF0 == 1)
                {
                        TF0 = 0;
                        TH0 = 0x7E;
                        TL0 = 0x66;
                        cnt++;
                        if(cnt >= 1)
                        {
                           cnt = 0;
                                 sec++;
                                ledBuff[0] = ledchar[sec%10];      //将数据输入缓冲区       
                                ledBuff[1] = ledchar[sec/10%10];
                                 if((ledBuff[0] != 0xC0 ) && (ledBuff[5] == 0xFF) && (ledBuff[4] == 0xFF) && (ledBuff[3] == 0xFF) && (ledBuff[2] == 0xFF) && (ledBuff[1] == 0xC0))
                                 {
                                    ledBuff[1] = 0xFF;
                                 }
                           ledBuff[2] = ledchar[sec/100%10];
                                 if((ledBuff[5] == 0xFF) && (ledBuff[4] == 0xFF) && (ledBuff[3] == 0xFF) && (ledBuff[2] == 0xC0))
                                 {
                                    ledBuff[2] = 0xFF;
                                 }
                         ledBuff[3] = ledchar[sec/1000%10];
                                  if((ledBuff[5] == 0xFF) && (ledBuff[4] == 0xFF) && (ledBuff[3] == 0xC0))
                                 {
                                    ledBuff[3] = 0xFF;
                                 }
                         ledBuff[4] = ledchar[sec/10000%10];
                                 if((ledBuff[5] == 0xFF) && (ledBuff[4] == 0xC0))
                                 {
                                    ledBuff[4] = 0xFF;
                                 }       
                         ledBuff[5] = ledchar[sec/100000%10];
                                 if(ledBuff[5] == 0xC0)
                                 {
                                    ledBuff[5] = 0xFF;
                                 }       
                                                                                
                        }
                         P0 = 0xFF;   //消除鬼影   另一种方法 ENLED = 1 与下面ENLED = 0 共用
                         switch(i)
                         {
                                 case 0:ADDR2=1;ADDR1=0;ADDR0=1;i++0=ledBuff[0];break;  //显示缓冲区内容
                                 case 1:ADDR2=1;ADDR0=0;ADDR0=0;i++0=ledBuff[1];break;
                                 case 2:ADDR2=0;ADDR1=1;ADDR0=1;i++0=ledBuff[2];break;
                                 case 3:ADDR2=0;ADDR1=1;ADDR0=0;i++0=ledBuff[3];break;
                                 case 4:ADDR2=0;ADDR1=0;ADDR0=1;i++0=ledBuff[4];break;
                                 case 5:ADDR2=0;ADDR1=0;ADDR0=0;i=00=ledBuff[5];break;
                                 default:break;
                         }         
                                                  //ENLED = 0;
                }
       
        }
}       
这是最高位不显示动态刷新数码管的程序

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

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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