找回密码
 立即注册

QQ登录

只需一步,快速开始

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

各位高手帮忙看看为什么单片机控制led不显示 求帮助

[复制链接]
跳转到指定楼层
楼主
单片机程序
#include <stc15.h>                        // 包含STC15的头文件
#include <intrins.h>                // 包含intrins.h头文件,以便延时函数中用
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
/*七段共阳极管显示定义*/
uchar code dispcode[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管显示数字0~9
sbit CLK=P5^5; //74HC595的11引脚
sbit DAT=P5^4; //74HC595的14引脚
sbit RCLK=P3^6;  //74HC595的12引脚
sbit CS1=P1^0; //数码管段位COM1(公共端)即数码管的1脚
sbit CS2=P1^1; //数码管段位COM2(公共端)即数码管的2脚
sbit CS3=P1^2; //数码管段位COM3(公共端)即数码管的3脚
sbit CS4=P1^3; //数码管段位COM4(公共端)即数码管的4脚
sbit CS5=P1^4; //数码管段位COM5(公共端)即数码管的5脚
sbit CS6=P1^5; //数码管段位COM6(公共端)即数码管的6脚

/*定义并初始化变量*/
uchar seconde=0;
uchar minite=0;
uchar hour=12;
uchar mstcnt=0;
//uchar i=0;

sbit P1_0=P3^3;                 // second 调整定义k3
sbit P1_1=P3^1;                 //minite调整定义,k2
sbit P1_2=P3^2;                 //hour调整定义,k1
/*函数声明*/
void delay(uchar k );      //延时子程序
void time_pro( );    //时间处理子程序
void write595(uchar word);  //写595 ,显示
void keyscan( );       //键盘扫描子程序
/*****************************/
/*延时子程序*/
/****************************/
void delay(uchar k)   //延时函数100us
{
uchar m=30;
_nop_();
_nop_();
  do
   {
    while(--m);
    }
        while(--k);
   }
//写数码管函数
void write595(uchar word)
{
        uchar num;
                  
                uchar c=0;  
                num=dispcode[word];
         for(c=0;c<8;c++)
        {
                   CLK=0;
           DAT=num&0x80;
           num=num<<1;
           CLK=1;
                                 
                 }
                  
            RCLK=0;
               _nop_();
               _nop_();
        RCLK=1;
               
}

void select1(void)
{ //第一位数码管
        CS1=0;CS2=1;CS3=1;CS4=1;CS5=1;CS6=1;
}

void select2(void)
{ //第二位数码管
        CS1=1;CS2=0;CS3=1;CS4=1;CS5=1;CS6=1;
}

void select3(void)
{ //第三位数码管
        CS1=1;CS2=1;CS3=0;CS4=1;CS5=1;CS6=1;
}

void select4(void)
{ //第四位数码管
        CS1=1;CS2=1;CS3=1;CS4=0;CS5=1;CS6=1;
}

void select5(void)
{ //第五位数码管
        CS1=1;CS2=1;CS3=1;CS4=1;CS5=0;CS6=1;
}

void select6(void)
{ //第六位数码管
        CS1=1;CS2=1;CS3=1;CS4=1;CS5=1;CS6=0;
}


/**************************/
/*时间处理子程序*/
/**************************/

void time_pro(void)
{
        if(seconde==60)                    //秒钟设为60进制
          { seconde=0;
            minite++;
           if( minite==60)              //分钟设为60进制
              { minite=0;
                hour++;
              if(hour==12)              //时钟设为12进制
                 {hour=0; }
              }
          }

}
/*******************************/
/*键盘扫描子程序*/
/*******************************/
void keyscan(void)
{
    if(P1_0==0)                     //按键3秒的调整
       {
           delay(30);
               if(P1_0==0)
                   {
                       seconde++;
                      if(seconde==60)
                        {seconde=0; }
                   }
       }
    if(P1_1==0)                    //按键2分的调整
       {
            delay(30);
               if(P1_1==0)
                 {
                    minite++;
                    if(minite==60)
                      {minite=0;}
       }
     }
    if(P1_2==0)                   //按键1小时的调整
       {
            delay(30);
               if(P1_2==0)
                   {
                       hour++;
                    if(hour==24)
                      {hour=0; }
                 }
       }
}
void time_0()interrupt 1 //定时器0 50ms
{
         TH0=0x4c;             //预置计数初值
     TL0=0x00;

        mstcnt++;
        if(mstcnt==20)
        {
            seconde++;
            mstcnt=0;    //注意点。对计数单元的清零十分的重要,本次调试中就是
        }               //因为忽略了这一点,给我早成了很大的被动。

}
/**************************/
/*主函数*/
/**************************/
void main(void)
{
P1=0xff;                //初始化p1口,全设为1
AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式
        TL0 = 0x00;                //设置定时初值
        TH0 = 0x4C;
        EA=1;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时


    while (1)
{
         keyscan( );    //按键扫描
         time_pro( ); //时间处理
           write595(hour/10); //要写的值         
           select1(); //显示第一位数码管  
           delay(1);
           write595(hour%10); //要写的值
           select2(); //显示第二位数码管
           delay(1);  
           write595(minite/10); //要写的值
           select3(); //显示第三位数码管
            delay(1);   
           write595(minite%10); //要写的值
           select4(); //显示第四位数码管
           delay(1);   
           write595(seconde/10); //要写的值
           select5(); //显示第五位数码管
            delay(1);   
           write595(seconde%10); //要写的值
           select6(); //显示第六位数码管
            delay(1);

}
}

led.jpg (208.87 KB, 下载次数: 13)

用人家的电路自己编程实现LED时钟

用人家的电路自己编程实现LED时钟
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:280678 发表于 2019-6-30 18:10 | 只看该作者
只是实现LED时钟和调节时间功能
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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