本帖最后由 donglaile 于 2012-5-4 20:43 编辑
对不起大家!
我查了一天,最后把单片机拿下来试了端口没烧,但一插上去就是只有两个灯很亮,其他的只是微弱的亮,开始百思不得其解,后面继续弄,突然想到会不会是焊接的问题,就一个一个的试了看,发现是我用的那个免刮漆包线的问题,有部分短路了,一气之下,全部扯掉,用排线焊了,一切恢复正常。额,,,,,通过这件事儿,让我学到了做事要耐心不要急躁,要怀疑自己,才能找出问题。
开始时,我急躁了,现在想想觉得自己好笨,唉,要慢慢熬啊!
以下是参考别人的程序,自己改了一点,做出的效果和代码:
/**********************************************************
名称:LED摇摇棒64*16像素自适应速度
说明:外中断方式INT0显示;取模方式:从上到下从左到右,纵向8点下高位
**********************************************************/
#include"STC89.h"
#define uchar unsigned char
#define uint unsigned int //宏定义
/*********外部接口定义**********/
#define data1 P1 //16位数据低8位
#define data2 P2 //16位数据高8位
#define KEY P34 //定义画面切换按键
/*********全局变量定义**********/
unsigned long int TimeCount=0; //定时器单位时间计数
unsigned int DelayN=80; //延时临时计数
unsigned int DelayTime=80; //每次延时的周期个数
unsigned char KY; //计数开关
unsigned char disp; //显示汉字指针
unsigned char pic=0; //按键次数;
unsigned char num=0; //中断次数
uchar code love[] = { //64*16
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[] = { //64*16
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[] = { //64*16
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[] = { //64*16
//-- 欢 --
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
};
unsigned char code GB_16[] = //64*16数据表
{
//"欢",
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,0x40,0x20,0x30,0x10,0x00,0xFC,0x77,
0x23,0x80,0x10,0x81,0x8C,0x88,0x67,0x92,
0x04,0xB4,0xF4,0x83,0x04,0x80,0x44,0xE0,
0x94,0x00,0x8C,0x11,0x00,0x60,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,
//"欢",
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,0x40,0x20,0x30,0x10,0x00,0xFC,0x77,
0x23,0x80,0x10,0x81,0x8C,0x88,0x67,0x92,
0x04,0xB4,0xF4,0x83,0x04,0x80,0x44,0xE0,
0x94,0x00,0x8C,0x11,0x00,0x60,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,
//"你",
0x40,0x00,0x20,0x00,0xF8,0xFF,0x07,0x00,
0x40,0x00,0x20,0x08,0x18,0x04,0x0F,0x43,
0x08,0x80,0xC8,0x7F,0x08,0x00,0x08,0x01,
0x28,0x06,0x18,0x0C,0x00,0x00,0x00,0x00,
//"好",
0x10,0x40,0x10,0x22,0xF0,0x15,0x1F,0x08,
0x10,0x14,0xF0,0x63,0x80,0x00,0x82,0x00,
0x82,0x40,0x82,0x80,0xE2,0x7F,0x92,0x00,
0x8A,0x00,0xC6,0x00,0x80,0x00,0x00,0x00,
//"吗",
0x00,0x00,0xFC,0x1F,0x04,0x08,0x04,0x08,
0xFE,0x1F,0x04,0x08,0x02,0x08,0xFA,0x09,
0x02,0x09,0x02,0x09,0x02,0x0D,0xFF,0x49,
0x02,0x81,0x80,0x7F,0x00,0x01,0x00,0x00,
//"?",
0x00,0x00,0x00,0x00,0x30,0x00,0x38,0x00,
0x28,0x00,0x04,0x00,0x04,0x20,0x04,0x70,
0x84,0x73,0x84,0x21,0xC4,0x00,0x4C,0x00,
0x78,0x00,0x30,0x00,0x00,0x00,0x00,0x00
};
// 汉字表:
unsigned char code GB_161[] = // 数据表
{
//"欢",
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,0x40,0x20,0x30,0x10,0x00,0xFC,0x77,
0x23,0x80,0x10,0x81,0x8C,0x88,0x67,0x92,
0x04,0xB4,0xF4,0x83,0x04,0x80,0x44,0xE0,
0x94,0x00,0x8C,0x11,0x00,0x60,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 SysInit(void);
void display1(void);
void display2(void);
void display3(void);
void display4(void);
void DelayUs(uint N);
void delay(unsigned char n);
void display_lzd(void);
void display(void);
void display_pic(unsigned char code *pic); //显示16*16点阵图
/*****主函数*****/
void main(void)
{
SysInit();
display_pic(GB_16);
while(1) //主程序中只检测按键
{
if(KEY==0) //画面切换键按下
{
DelayUs(5000); //按键去抖处理
if(KEY==0)
{
pic++;
if(pic >= 5)
{pic = 0;}
while(KEY == 0);//等待按键释放
}
}
};
}
/*****外部中断0 服务程序*****/
void intersvr0(void) interrupt 0 using 1 //使用外部中断0
{
KY=~KY;
if(KY==0)
{
num++; //计算中断次数
}
if(TimeCount<800) return; //中断去抖4500
data1=0xff; //清显示
data2=0xff;
DelayTime=TimeCount/200;//设定每次延时时钟周期数=总时间/(16列*2组*1个字)640
TimeCount=0; //延时周期计数清零
delay(70); //延时20列
//display_pic(GB_16); //显示一个16*16的字或图片
display();
//display_lzd();
data1=0xff;
data2=0xff;
while(P32==1);//每个摇动来回水银开关会在摆幅两端分别产生下降沿中断,
//只提取其中一次(从左向右摇才显示),根据自己的硬件结构调整是等于0或1
}
/***定时器0 中断服务程序****/
void timer0(void) interrupt 1 using 2 //定时器1中断子程序
{
TimeCount++;
if (DelayN!=0)
DelayN--;
}
void SysInit(void)
{
IT0=1;
EX0=1; //下降沿中断
IP=0x02; //设置中断优先级,T0高优先级
TMOD=0x02; //定时器0方式2,8位重装载
TH0=0x80; //设定定时器初值
TL0=0x80;
ET0=1; //定时器0中断允许
TR0=1; //启动定时器0,开始计时
EA=1; //开中断
KY=0;
}
/************************************************************/
/*****n(us)延时子程序*****/
void DelayUs(uint N)
{
uint x;
for(x=0; x<=N;x++);
}
/*********自适应延时子程序**********/
void delay(unsigned char n)
{
for(;n>0;n--)
{
DelayN=DelayTime;
while (DelayN);
}
}
/*********显示内容选择子程序**********/
void display(void)
{
switch(pic) //选择画面
{
case 0:{display1();}break;
case 1:{display2();}break;
case 2:{display3();}break;
case 3:{display4();}break;
case 4:{display_lzd();}break;
default:{display1();}
}
}
/*********图片显示子程序**********/
void display_pic(unsigned char code *pic) //显示16*16点阵图
{ unsigned char i;
for(i=0;i<16;i++)
{
P1=~pic[i*2];
P2=~pic[i*2+1];
delay(1);
}
}
/*****显示(汉字)*****/
void display_lzd(void)
{
uchar i;
if(num>10){disp++;num=0;} //12个汉字分为3次显示完(每次显示4个),每中断10次切换
if(disp>2)disp=0;
for(i=0;i<64;i++)
{
P1=~GB_16[disp*128+i*2];
P2=~GB_16[disp*128+i*2+1];
delay(1);
}
}
/*****显示子程序1(汉字)*****/
void display1(void)
{
uchar i;
if(num>10)
{disp++;num=0;} //12个汉字分为3次显示完(每次显示4个),每中断10次切换
if(disp>2)
{disp=0;}
for(i=0;i<64;i++)
{
P1=~hanzi[disp*128+i*2];
P2=~hanzi[disp*128+i*2+1];
delay(1);
}
}
/*****显示子程序2(LOVE)*****/
void display2(void)
{
uchar i;
for(i=0;i<64;i++)
{
P1=~love[i*2];
P2=~love[i*2+1];
delay(1);
}
}
/*****显示子程序3(心形图案)*****/
void display3(void)
{
uchar i;
for(i=0;i<64;i++)
{
P1=~loveyou[i*2];
P2=~loveyou[i*2+1];
delay(1);
}
}
/*****显示子程序4(呵呵o(∩_∩)o图案)*****/
void display4(void)
{
uchar i;
for(i=0;i<64;i++)
{
P1=~hehe[i*2];
P2=~hehe[i*2+1];
delay(1);
}
}
效果图:
|