rickly_hzy 发表于 2011-10-24 18:03:16

16LED摇摇棒

#include <reg52.h>
/*********外部接口定义**********/
#define out P1        //数据输出端口
sbit led1=P3^0;        //第1组LED
sbit led2=P3^1;        //第2组LED
sbit p3_3=P3^3;//滚珠开关
sbit key1=P3^7;//切换开关

/*********全局变量定义**********/
unsigned long int TimeCount=0;         //定时器单位时间计数
unsigned int         DelayN=80,                //延时临时计数
                                DelayTime=80;                //每次延时的周期个数
unsigned char key;                //按键输入

/*********图片点阵数据表**********/
unsigned char code pic1[]=
{

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,
0xF7,0xDF,0xF7,0xDF,0xF7,0xDF,0x07,0xC0,
0x07,0xC0,0xF7,0xDF,0xF7,0xDF,0xF7,0xDF,
0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF //I
};
unsigned char code pic2[]=
{
0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0x07,0xFE,
0x03,0xFC,0x07,0xF8,0x0F,0xF0,0x1F,0xE0,
0x1F,0xE0,0x0F,0xF0,0x07,0xF8,0x03,0xFC,
0x07,0xFE,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF //爱心
};
unsigned char code pic3[]=
{
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0xF0,
0x03,0xE0,0xFF,0xC7,0xFF,0xCF,0xFF,0xCF,
0xFF,0xCF,0xFF,0xCF,0xFF,0xC7,0x03,0xE0,
0x03,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF //U
};
/*0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,
0xFF,0xCF,0xE7,0xCF,0xE3,0xCF,0x01,0xC0,
0x01,0xC0,0xFF,0xCF,0xFF,0xCF,0xFF,0xCF,
0xFF,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF*///1

/*0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFB,0xEF,
0xFB,0xEF,0x1B,0xE0,0xFB,0xEF,0xFB,0xEF,
0x03,0xE0,0x7B,0xEF,0x7B,0xEF,0xFB,0xEF,
0xFF,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF*/ //正

/*0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,
0xFF,0xCF,0xFF,0xCF,0xFF,0xCF,0x01,0xC0,
0x01,0xC0,0xE3,0xCF,0xE7,0xCF,0xFF,0xCF,
0xFF,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF*///1
/* (16 X 16 ) */

/*********子程序声明**********/
void delay(unsigned char n);        //延时子程序
void display_pic(unsigned char code *pic);        //图片显示子程序
/********* 主 程 序 **********/
void main()
{       
    unsigned int i;
        EX1=1;        //开放外部中断1
        IT1=0;        //中断1为边沿触发方式
        IP=0x08;        //设置中断嵌套
        TMOD=0x20;        //定时器1方式2,8位重装载
        TH1=0x80;        //设定定时器初值
        TL1=0x80;
        EA=1;                //开放中断
        ET1=1;        //开放定时器1中断
        TR1=1;        //启动定时器0,开始计时
        key=0;        //初始化显示第一组文字
   // out=0xff;
    //led1=0x00;
    //led2=0x00;
        while(1)
      {
         //等待中断
                if(key1==0)
         {
                        for(i=0;i<6000;i++);        //按键去抖处理
                        if(key1==0)
                {                        //有键按下
                                key++;                                //更换下一幅图片
                                if(key==4) key=0;        //图片循环显示
                                while(key1==0);                //等待按键释放
                          }
                  }
          };       
}

/*********图片显示子程序**********/
void display_pic(unsigned char code *pic)        //显示16*16点阵图
{        unsigned char i,n;
        n=0;                                        //初始化数据表计数
        for(i=0;i<16;i++){                //共显示16*3=48列
                out=0xff;                        //清显示
                led2=1;                        //关闭第2组LED
                led1=0;                        //开启第1组LED          
                out=*(pic+n++);        //输出数据到LED
                delay(1);                //延时
                       
                out=0xff;                        //清显示
                led1=1;                        //关闭第1组LED
                led2=0;                         //开启第2组LED
                out=*(pic+n++);        //输出数据到LED
                delay(1);                 //延时
        }
}
/*********显示内容选择子程序**********/
void display(unsigned char i)
{
        switch (i){                                                        //通过按键选择显示内容
                case 0:        display_pic(pic1);break;
                case 1:        display_pic(pic2);break;
                case 2:        display_pic(pic3);break;
        }
}
/*********延时子程序**********/
void delay(unsigned char n)
{
        for(;n>0;n--)
       {
                DelayN=DelayTime;
                while (DelayN);
           }
}


/*********中断子程序**********/
void int1() interrupt 2                //使用外部中断1
{       
        if(TimeCount<800) return;        //中断去抖4500
        out=0xff;                                //清显示
        DelayTime=TimeCount/200;//设定每次延时时钟周期数=总时间/(16列*2组*1个字)640
        TimeCount=0;                        //延时周期计数清零
        delay(70);                //延时20列

        display(key);
        //display_pic(pic1);                        //显示图片
        out=0xff;
        while(p3_3==0);
}



void timer1() interrupt 3                //定时器1中断子程序
{
        TimeCount++;
        if (DelayN!=0)
                DelayN--;
}

rickly_hzy 发表于 2011-10-24 18:28:22

回复【楼主位】rickly_hzy
-----------------------------------------------------------------------

http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_688308TDG5ZD.jpg
自己焊接的电路 (原文件名:20111024568.jpg)

看看效果ourdev_688309A2EG4J.avi视频文件大小:7.00M) (原文件名:20111022032.avi)

caoweidong 发表于 2011-10-29 19:31:18

这个不错

598439837 发表于 2013-1-26 12:08:10

我在做。少几个10k的电阻。。。少一个水银开关。。。买不到啊。。。什么情况?

5612404 发表于 2013-1-27 10:36:42

598439837 发表于 2013-1-26 12:08
我在做。少几个10k的电阻。。。少一个水银开关。。。买不到啊。。。什么情况? ...

我的开关是用滚珠自制的,也还凑合用,不知你用10K电阻做什么

598439837 发表于 2013-1-27 11:38:50

5612404 发表于 2013-1-27 10:36 static/image/common/back.gif
我的开关是用滚珠自制的,也还凑合用,不知你用10K电阻做什么

这图上很多10k电阻啊。。我照这个做的。。。

598439837 发表于 2013-1-27 11:40:32

在做,新手,第一次做东西。求QQ,求指点。。

tonyone 发表于 2013-1-27 22:37:21

不错,有时间我也试试

青春从未醒 发表于 2013-1-27 23:05:32

挺好不错

5612404 发表于 2013-2-1 10:47:22

598439837 发表于 2013-1-27 11:38 static/image/common/back.gif
这图上很多10k电阻啊。。我照这个做的。。。

不用10k的也应该可以,和10k接近,复位电路还是用10k吧

lijia115003 发表于 2013-2-1 12:42:44

挺不错的

清雨影 发表于 2013-2-1 14:04:59

598439837 发表于 2013-1-27 11:38 static/image/common/back.gif
这图上很多10k电阻啊。。我照这个做的。。。

淘宝搜索“排阻”吧少年,那东西用起来真TM爽……

598439837 发表于 2013-2-9 10:36:58

清雨影 发表于 2013-2-1 14:04 static/image/common/back.gif
淘宝搜索“排阻”吧少年,那东西用起来真TM爽……

好吧。。。

jieti123 发表于 2013-2-10 08:07:57

我也做过,挺好玩的。。

xbwpc 发表于 2013-2-10 16:23:37

PCB打样做了个小的,52mm*17mm,用的是STM8l101f3,送妹子了。

老头儿 发表于 2013-2-14 09:43:02

F:\电子小组\摇摇帮 终极精简美化版(附程序 取模软件)

老头儿 发表于 2013-2-14 09:44:22

摇摇棒STC89C52
页: [1]
查看完整版本: 16LED摇摇棒