找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1187|回复: 0
收起左侧

蓝桥杯第九届彩灯控制器代码分享,仅供参考,讨论学习用

[复制链接]
ID:1015572 发表于 2022-4-20 17:57 | 显示全部楼层 |阅读模式
#include<stc15f2k60s2.h>            //18;00     led亮度无法调节
#include<intrins.h>
#include"iic.h"
typedef unsigned int uint;
typedef unsigned char uchar;
uint yi,er,san,si,wu,liu,qi,ba;
uint smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
uchar ledd[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar s7=0,s6=0,s5=0,s4=0;
void bzcsh();
void delay(uint ms);
void anjian();
void smgduan1(uint yi,uint er);
void smgduan2(uint san,uint si);
void smgduan3(uint wu,uint liu);
void smgduan4(uint qi,uint ba);
void Timer0Init(void);                //1微秒@11.0592MHz
void zd();
uchar rb2,iiic,liangdu;
uchar i;
uint sdsj;
uchar add=0,moshi=1;
uint tt,ttt;
void main()
{
        bzcsh();
        //iic_write(0x07,4);
        sdsj=iic_read(0x07);
        Timer0Init();
        while(1)
        {
                anjian();
                smgduan1( yi, er);
          smgduan2( san, si);
                smgduan3( wu, liu);
                smgduan4( qi, ba);
                rb2=ad(0x03);
                if(rb2<63.75)liangdu=1;
                if((rb2>63.75)&&(rb2<127.5))liangdu=2;
                if((rb2>127.5)&&(rb2<191.25))liangdu=3;
                if((rb2>191.25)&&(rb2<255))liangdu=4;       
                if(s7==0){EA=0;ET0=0;P2=0x80;P0=0xff;}
                if(s7==1){EA=1;ET0=1;yi=10;er=moshi;san=10;si=11;wu=sdsj/10;liu=sdsj%10;qi=0;ba=0;}
                if(s6==1){P2=0x80;P0=0xff;EA=0;ET0=0;s6=0;add++;if(add==3)add=0;if(moshi==1)i=0;if(moshi==2)i=8;if(moshi==3)i=1;if(moshi==4)i=1;}
                if(add==1){yi=10;er=moshi;san=10;si=11;wu=sdsj/10;liu=sdsj%10;qi=0;ba=0;if(s5==1){s5=0;moshi++;if(moshi==5)moshi=1;}if(s4==1){s4=0;moshi--;if(moshi==0)moshi=4;}}
                if(add==2){yi=10;er=moshi;san=10;si=11;wu=sdsj/10;liu=sdsj%10;qi=0;ba=0;if(s5==1){s5=0;sdsj=sdsj+1;if(sdsj==13)sdsj=12;}if(s4==1){s4=0;sdsj=sdsj-1;if(sdsj==3)sdsj=4;}}               
                if(add==0){yi=11;er=11;san=11;si=11;wu=11;liu=11;qi=11;ba=11;}
                if((s4==1)&&(add==0)){yi=11;er=11;san=11;si=11;wu=11;liu=11;qi=10;ba=liangdu;}
        }
}       
void Timer0Init(void)                //1毫秒@11.0592MHz
{
        AUXR |= 0x80;                //定时器时钟1T模式
        TMOD &= 0xF0;                //设置定时器模式
        TL0 = 0xCD;                //设置定时初值
        TH0 = 0xD4;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
}
void zd() interrupt 1
{
        tt++;ttt++;
        if(liangdu==1)
        {
                if(ttt<20)
                {               
                        if(tt==(sdsj*100))
                        {
                                tt=0;                       
                                if(moshi==1){if(i==8)i=0;P2=0x80;P0=ledd[i];i++;}
                                if(moshi==2){if(i==-1)i=8;P2=0x80;P0=ledd[i];i--;}
                                if(moshi==3){if(i==5)i=1;if(i==1){P2=0x80;P0=0x7e;}if(i==2){P2=0x80;P0=0xbd;}if(i==3){P2=0x80;P0=0xdb;}if(i==4){P2=0x80;P0=0xe7;}i++;}
                                if(moshi==4){if(i==5)i=1;if(i==1){P2=0x80;P0=0xe7;}if(i==2){P2=0x80;P0=0xdb;}if(i==3){P2=0x80;P0=0xbd;}if(i==4){P2=0x80;P0=0x7e;}i++;}
                         }
                }
                if((ttt>=2)&&(ttt<10)){P2=0x80;P0=0xff;}
        }
        if(liangdu==2)
        {
                if(ttt<20)
                {               
                        if(tt==(sdsj*100))
                        {
                                tt=0;                       
                                if(moshi==1){if(i==8)i=0;P2=0x80;P0=ledd[i];i++;}
                                if(moshi==2){if(i==-1)i=8;P2=0x80;P0=ledd[i];i--;}
                                if(moshi==3){if(i==5)i=1;if(i==1){P2=0x80;P0=0x7e;}if(i==2){P2=0x80;P0=0xbd;}if(i==3){P2=0x80;P0=0xdb;}if(i==4){P2=0x80;P0=0xe7;}i++;}
                                if(moshi==4){if(i==5)i=1;if(i==1){P2=0x80;P0=0xe7;}if(i==2){P2=0x80;P0=0xdb;}if(i==3){P2=0x80;P0=0xbd;}if(i==4){P2=0x80;P0=0x7e;}i++;}
                         }
                }
                if((ttt>=4)&&(ttt<10)){P2=0x80;P0=0xff;}
        }
        if(liangdu==3)
        {
                if(ttt<20)
                {               
                        if(tt==(sdsj*100))
                        {
                                tt=0;                       
                                if(moshi==1){if(i==8)i=0;P2=0x80;P0=ledd[i];i++;}
                                if(moshi==2){if(i==-1)i=8;P2=0x80;P0=ledd[i];i--;}
                                if(moshi==3){if(i==5)i=1;if(i==1){P2=0x80;P0=0x7e;}if(i==2){P2=0x80;P0=0xbd;}if(i==3){P2=0x80;P0=0xdb;}if(i==4){P2=0x80;P0=0xe7;}i++;}
                                if(moshi==4){if(i==5)i=1;if(i==1){P2=0x80;P0=0xe7;}if(i==2){P2=0x80;P0=0xdb;}if(i==3){P2=0x80;P0=0xbd;}if(i==4){P2=0x80;P0=0x7e;}i++;}
                         }
                }
                if((ttt>=6)&&(ttt<10)){P2=0x80;P0=0xff;}
        }
        if(liangdu==4)
        {
                if(ttt<20)
                {               
                        if(tt==(sdsj*100))
                        {
                                tt=0;                       
                                if(moshi==1){if(i==8)i=0;P2=0x80;P0=ledd[i];i++;}
                                if(moshi==2){if(i==-1)i=8;P2=0x80;P0=ledd[i];i--;}
                                if(moshi==3){if(i==5)i=1;if(i==1){P2=0x80;P0=0x7e;}if(i==2){P2=0x80;P0=0xbd;}if(i==3){P2=0x80;P0=0xdb;}if(i==4){P2=0x80;P0=0xe7;}i++;}
                                if(moshi==4){if(i==5)i=1;if(i==1){P2=0x80;P0=0xe7;}if(i==2){P2=0x80;P0=0xdb;}if(i==3){P2=0x80;P0=0xbd;}if(i==4){P2=0x80;P0=0x7e;}i++;}
                         }
                }
                if((ttt>=8)&&(ttt<10)){P2=0x80;P0=0xff;}
        }
        if(ttt==10)ttt=0;
}
void bzcsh()
{
        P2=0XA0;P0=0X00;
        P2=0X80;P0=0XFF;
        P2=0XC0;P0=0XFF;
        P2=0XFF;P0=0XFF;
}
void delay(uint ms)
{
        uint i,j;
        for(i=0;i<ms;i++)
          for(j=845;j>0;j--);
}
void anjian()
{
        if(P30==0)
        {
                delay(7);
                if(P30==0)
                {
                        s7=!s7;
                        sdsj=iic_read(0x07);
                }
                while(!P30);
        }
        if(P31==0)
        {
                delay(7);
                if(P31==0)
                {
                        s6=1;
                        iic_write(0x07,sdsj);
                }
                while(!P31);
        }
        if(P32==0)
        {
                delay(7);
                if(P32==0)
                {
                        s5=1;
                }
                while(!P32);
        }
        if(P33==0)
        {
                delay(7);
                if(P33==0)
                {
                        s4=1;
                }
        }
        if(P33==1)s4=0;
}
void smgduan1(uint yi,uint er)
{
        P2=0XC0;
        P0=0X01;
        P2=0XFF;
        P0=smgduan[yi];
        delay(1);
       
        P2=0XC0;
        P0=0X02;
        P2=0XFF;
        P0=smgduan[er];
        delay(1);
       
        P2=0XC0;P0=0XFF;
        P2=0XFF;P0=0XFF;
}
void smgduan2(uint san,uint si)
{
        P2=0XC0;
        P0=0X04;
        P2=0XFF;
        P0=smgduan[san];
        delay(1);
       
        P2=0XC0;
        P0=0X08;
        P2=0XFF;
        P0=smgduan[si];
        delay(1);
       
        P2=0XC0;P0=0XFF;
        P2=0XFF;P0=0XFF;
}
void smgduan3(uint wu,uint liu)
{
        P2=0XC0;
        P0=0X10;
        P2=0XFF;
        P0=smgduan[wu];
        delay(1);
       
        P2=0XC0;
        P0=0X20;
        P2=0XFF;
        P0=smgduan[liu];
        delay(1);
       
        P2=0XC0;P0=0XFF;
        P2=0XFF;P0=0XFF;
}
void smgduan4(uint qi,uint ba)
{
        P2=0XC0;
        P0=0X40;
        P2=0XFF;
        P0=smgduan[qi];
        delay(1);
       
        P2=0XC0;
        P0=0X80;
        P2=0XFF;
        P0=smgduan[ba];
        delay(1);
       
        P2=0XC0;P0=0XFF;
        P2=0XFF;P0=0XFF;
}

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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