搜索
bottom↓
回复: 1

求牛人帮着改一下代码把AT89S52的16位摇摇棒自动适应摇动速度~

[复制链接]

出0入0汤圆

发表于 2010-5-9 22:34:04 | 显示全部楼层 |阅读模式
我是用SW200D单向导通的滚珠开关 AT89S52的单片机 12MHZ的晶振 P1 P2口分别赋值高低八位共16位的发光二极管
显示总是不理想~
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int    //宏定义

#define key P3^0      //按键画面切换按键
uchar disp;     //显示汉字指针
uchar pic=0,num=0;     //pic为按键次数;num为中断次数

uchar code baobei[] =          // 数据表
{

0x20,0x00,0x24,0x08,0x24,0x48,0x24,0x84,
      0xFE,0x7F,0x23,0x02,0x22,0x21,0x20,0x10,
      0xFF,0x09,0x20,0x06,0x22,0x1A,0xAC,0x61,
      0x20,0x80,0x30,0xE0,0x20,0x00,0x00,0x00,

0x00,0x00,0xF8,0x7F,0x0C,0x21,0x0B,0x21,
      0x08,0x21,0x08,0x21,0xFC,0x7F,0x28,0x00,
      0x90,0x00,0x0F,0x01,0x08,0x43,0x08,0x80,
      0x08,0x40,0xFC,0x3F,0x08,0x00,0x00,0x00,

0x10,0x00,0x0C,0x40,0x44,0x40,0x44,0x42,
      0x44,0x42,0x44,0x42,0x45,0x42,0xC6,0x7F,
      0x44,0x42,0x44,0x4A,0x44,0x5B,0x64,0x42,
      0x44,0x60,0x14,0x40,0x0C,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x80,0xFE,0x8F,
      0x02,0x40,0x02,0x20,0x02,0x18,0xFA,0x07,
      0x02,0x00,0x02,0x10,0x02,0x20,0xFF,0x4F,
      0x02,0xC0,0x00,0x00,0x00,0x00,0x00,0x00
};

uchar code love[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x20,0x00,0x20,0x00,0x20,
0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,
0x04,0x10,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x04,0x10,0xF8,0x0F,0x00,0x00,
0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x10,
0x00,0x08,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x82,0x20,0x82,0x20,
0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*LOVE*/
};

uchar code loveyou[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x78,0x00,0xFC,0x00,0xFE,0x01,0xFE,0x03,0xFE,0x07,0xFE,0x0F,0xFE,0x1F,0xFC,0x3F,
0xF8,0x7F,0xFC,0x3F,0xFE,0x1F,0xFE,0x0F,0xFE,0x07,0xFE,0x03,0xFE,0x01,0xFC,0x00,
0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*心形图案*/
};

uchar code hehe[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x40,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,
0xF0,0x0F,0x08,0x10,0x04,0x20,0x00,0x00,0x00,0x00,0xF0,0x3F,0x08,0x00,0x04,0x00,
0x04,0x00,0x04,0x00,0x08,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x20,
0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0xF0,0x3F,0x08,0x00,0x04,0x00,
0x04,0x00,0x04,0x00,0x08,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x04,0x20,0x08,0x10,
0xF0,0x0F,0x00,0x00,0x00,0x00,0xC0,0x01,0x40,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*呵呵o(∩_∩)o图案*/
};

unsigned char code hanzi[] = {
//-- 欢 --
      0x04,0x10,0x34,0x08,0xC4,0x06,0x04,0x01,
      0xC4,0x82,0x3C,0x8C,0x20,0x40,0x10,0x30,
      0x0F,0x0C,0xE8,0x03,0x08,0x0C,0x08,0x10,
      0x28,0x60,0x18,0xC0,0x00,0x40,0x00,0x00,
//-- 迎 --
      0x40,0x00,0x42,0x40,0x44,0x20,0xC8,0x1F,
      0x00,0x20,0xFC,0x47,0x04,0x42,0x02,0x41,
      0x82,0x40,0xFC,0x7F,0x04,0x40,0x04,0x42,
      0x04,0x44,0xFE,0x63,0x04,0x20,0x00,0x00,
//-- 使 --
      0x40,0x00,0x20,0x00,0xF8,0xFF,0x07,0x00,
      0x04,0x80,0xF4,0x43,0x14,0x45,0x14,0x29,
      0x14,0x19,0xFF,0x17,0x14,0x21,0x14,0x21,
      0x14,0x41,0xF6,0xC3,0x04,0x40,0x00,0x00,
//-- 用 --
      0x00,0x80,0x00,0x60,0xFE,0x1F,0x22,0x02,
      0x22,0x02,0x22,0x02,0x22,0x02,0xFE,0x7F,
      0x22,0x02,0x22,0x02,0x22,0x42,0x22,0x82,
      0xFF,0x7F,0x02,0x00,0x00,0x00,0x00,0x00,
//-- 神 --
      0x08,0x01,0x88,0x00,0x49,0x00,0xEE,0xFF,
      0x58,0x00,0x88,0x00,0x00,0x00,0xF8,0x1F,
      0x88,0x08,0x88,0x08,0xFF,0xFF,0x88,0x08,
      0x88,0x08,0xFC,0x1F,0x08,0x00,0x00,0x00,
//-- 奇 --
      0x40,0x00,0x40,0x00,0x44,0x00,0x44,0x3E,
      0x64,0x12,0x54,0x12,0x4C,0x12,0x47,0x12,
      0x4C,0x3F,0x54,0x42,0x74,0x80,0xC6,0x7F,
      0x44,0x00,0x60,0x00,0x40,0x00,0x00,0x00,
//-- 魔 --
      0x00,0x40,0x00,0x30,0xFE,0x8F,0x4A,0x80,
      0xAA,0x5F,0x9A,0x4A,0xFE,0x2A,0xAA,0x1A,
      0xCB,0x0F,0xAA,0x7A,0xFE,0x8A,0x9A,0xAA,
      0xAA,0x8F,0x6B,0x80,0x22,0xE0,0x00,0x00,
//-- 幻 --
      0x80,0x20,0xC0,0x30,0xA0,0x28,0x98,0x24,
      0x87,0x22,0x80,0x21,0xC4,0x30,0x04,0x60,
      0x04,0x00,0x04,0x20,0x04,0x40,0x04,0x80,
      0x04,0x40,0xFE,0x3F,0x04,0x00,0x00,0x00,
//-- 摇 --
      0x10,0x02,0x10,0x42,0x10,0x81,0xFF,0x7F,
      0x90,0x04,0x54,0x05,0xCC,0xF4,0xB4,0x44,
      0x84,0x44,0xBC,0x7F,0x82,0x44,0xA2,0x44,
      0x9B,0xF4,0x82,0x06,0x00,0x04,0x00,0x00,
//-- 摇 --
      0x10,0x02,0x10,0x42,0x10,0x81,0xFF,0x7F,
      0x90,0x04,0x54,0x05,0xCC,0xF4,0xB4,0x44,
      0x84,0x44,0xBC,0x7F,0x82,0x44,0xA2,0x44,
      0x9B,0xF4,0x82,0x06,0x00,0x04,0x00,0x00,
//-- 棒 --
      0x10,0x04,0x10,0x03,0xD0,0x00,0xFF,0xFF,
      0x90,0x00,0x54,0x05,0x44,0x12,0xD4,0x15,
      0x74,0x14,0x5F,0xFF,0xD4,0x14,0x54,0x15,
      0x56,0x12,0x44,0x06,0x40,0x02,0x00,0x00,
//-- ! --
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x7C,0x10,0xFE,0x3B,
      0xFE,0x3B,0x7C,0x10,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

void show1(void);  //显示函数 1
void show2(void);  //显示函数 2                                                   xd
void show3(void);  //显示函数 3
void show4(void);  //显示函数 4

void delay(uint z); //延时函数
void delay1(uchar time)
{
        unsigned int i,j;
        for(i = 0;i < 15;i++)
        for(j = 0;j < time;j++);
}


void main(void)
        {
                IT0=1;//开总中断
                EX0=1;//开中断,下降沿中断
                EA=1;  //启动外部中断       
                P1=0xff; //高低八位分别赋值给P1,P2
                P2=0xff;
                pic=0;
                                                            
                 while(1)      
                         {
                                if(key==0)     //画面切换键按下
                                        {
                                                delay(10);     //按键去抖
                                                if(key==0);
                                                        {
                                                        pic++;
                                                        }
                                        }
                                while(!key);
                                delay(10);
                                while(!key);//判断是否已经松开按键
                                        if(pic>3)
                                                pic=0;


                        }
        }


void intersvr0(void) interrupt 0 using 1        //P3^2滚珠开关触发外部中断
        {
                num++;     //计算中断次数
                switch(pic)      //选择画面
                {
                        case 0:
                                {
                                show1();
                                       
                                }
                                        break;
                        case 1:
                                {
                                        show2();
                                }
                                        break;
                        case 2:
                                {
                                        show3();
                                }
                                        break;
                        case 3:
                                {
                                        show4();
                                }
                                        break;
                        default:
                                {
                                show1();
                                }  
        }
            
        }

void show1(void)
        {
                 uchar i;
                 delay1(15);       
//        delay(70);         //调整延时让汉字居中
                 for(i=0;i<32;i++)
                 {
       
                     P1=~baobei[i*2];
                     P2=~baobei[i*2+1];

                 delay(1);

                 }
        }

void show2(void)
        {
                 uchar i;
                 if(num>10)                          //12个汉字分为3次显示完(每次显示4个),每中断10次切换
                        {
                                disp++;num=0;
                        }     
                 if(disp>2)
                        {       
                                disp=0;
                        }

                  delay(70);                   //调整延时让汉字居中
                    
                 for(i=0;i<64;i++)
                         {
                             P1=~hanzi[disp*128+i*2];
                             P2=~hanzi[disp*128+i*2+1];
                             delay(2);
                         }
        }




void show3(void)
        {
                 uchar i;
                  delay(70);          //调整延时让汉字居中
                 for(i=0;i<80;i++)
                        {
                             P1=~loveyou[i*2];
                             P2=~loveyou[i*2+1];
                             delay(2);
                        }
        }


void show4(void)
        {
                 uchar i;
                 delay(70);                  //调整延时让汉字居中
                 for(i=0;i<64;i++)
                        {
                                 P1=~hehe[i*2];
                                 P2=~hehe[i*2+1];
                                 delay(2);
                        }
        }




void delay(uint z)
        {
                uint x,y;
                for(x=z;x>0;x--)
                        for(y=110;y>0;y--);
        }
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3743729&bbs_page_no=3&bbs_id=3042 这位大哥的程序由于单片机不一样 我有点不懂 牛人帮着解释下也好~

这个是我的电路图~
(原文件名:摇摇棒电路图.JPG)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 15:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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