我是用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) |