8乘8点阵显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*8X8LED 点阵显示数字
/* 名称:8X8LED 点阵显示数字
/*说明:8X8LED 点阵屏循环显
/*示数字0~9,刷新过程由定时器中
/*断完成。

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Table_of_Digits[]=
{
0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, //0 0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00, //1 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //2 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, //3 0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00, //4 0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, //5 0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, //6 0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00, //7 0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //8 0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00 //9 };
uchar i=0,t=0,Num_Index;
//主程序
void main()
{
P3=0x80;
Num_Index=0; //从0 开始显示
TMOD=0x00; //T0 方式0
TH0=(8192-2000)/32; //2ms 定时
TL0=(8192-2000)%32;
IE=0x82;
TR0=1; //启动T0
while(1);
}
//T0 中断函数
void LED_Screen_Display() interrupt 1
{
TH0=(8192-2000)/32; //恢复初值
TL0=(8192-2000)%32;
P0=0xff; //输出位码和段码
P0=~Table_of_Digits[Num_Index*8+i];
P3=_crol_(P3,1);
if(++i==8) i=0; //每屏一个数字由8 个字节构成if(++t==250) //每个数字刷新显示一段时间
{
t=0;
if(++Num_Index==10) Num_Index=0; //显示下一个数字
}
}
/*2. 按键控制8X8LED 点阵屏显示图形
/* 名称:按键控制8X8LED 点阵屏显示图形说明:每次按下K1 时,会使/*8X8LED 点阵屏循环显示不同图形。

本例同时使用外部中断和定时中断。

*/ #include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//待显示图形编码
uchar code M[][8]=
{
{0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00}, //图1
{0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00}, //图2
{0x00,0x20,0x30,0x38,0x3c,0x3e,0x00,0x00} //图3
};
uchar i,j;
//主程序
void main()
{
P1=0xff;
TMOD=0x01; //T0 方式1
TH0=(65536-2000)/256; //2ms 定时
TL0=(65536-2000)%256;
IT0=1; //下降沿触发
IE=0x83; //允许定时器0、外部0 中断
i=0xff; //i的初值设为0xff,加1 后将从0 开始while(1);
}
//T0 中断控制点阵屏显示
void Show_Dot_Matrix() interrupt 1
{
TH0=(65536-2000)/256; //恢复初值
TL0=(65536-2000)%256;
P0=0xff; //输出位码和段码
P0=~M[i][j];
P1=_crol_(P1,1);
j=(j+1)%8;
}
//INT0 中断(定时器由键盘中断启动)
void Key_Down() interrupt 0
{
P1=0x80;
j=0;
i=(i+1)%3; //i在0,1,2 中取值,因为只要3 个图形TR0=1;
//程序代码//
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table2[]=
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code table1[]=
{0x10,0x10,0x38,0x54,0x18,0x28,0x24,0x00}; uchar code table3[]=
{0x10,0x50,0x3C,0x14,0x10,0x28,0x14,0x00 };
sbit led=P2^0;
uint t=0;
uchar i=0;
uint flag=0;
//主程序//
void main()
{
TMOD=0x00; //T0 方式0
TH0=(8192-2000)/32; //2ms 定时
TL0=(8192-2000)%32;
IE=0x82;
TR0=1; //启动T0
while(1);
} //T0 中断函数
void LED_Screen_Display() interrupt 1 {
TH0=(8192-2000)/32; //恢复初值
TL0=(8192-2000)%32;
t++;
i++;
if(i==8) i=0;
if(t==480)
{
flag=!flag;
t=0;
led=0;
}
if(flag==1)
{
led=1;
P0=0xff;
P0=table2[7-i]; P3=table1[i]; }
if(flag==0) {
P0=0xff;
P0=table2[7-i]; P3=table3[i];
}
}。

相关文档
最新文档