51单片机88点阵,使用示波器

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

第四周单片机任务

一.实验要求

1. 了解51单片机的串口使用

2.了解8*8点阵

3. 会使用示波器(proteus中有虚拟示波器)

具体内容:

1. 按下按钮,程序开始运行。再次按下按钮,程序暂停,

再次按下按钮程序接着上次暂停的部分继续运行。

2. 当第一次按下按钮后,8*8点阵按照顺序显示

“1,2,3,4,5,6,7,8,9,0”这几个数字(注意,每个数字显

示需要间隔2秒),当显示到0后,再从1开始。

3. 8*8点阵切换数字时是滚动效果。

4. 串口终端在按下按钮后显示出“now ,8*8 show

1,2,3,4,5,6,7,8,9,0”

5. 用虚拟示波器观察串口输出的波形,并截图展示

程序具体流程如下:

按下按钮,点阵显示1,串口终端显示“now ,8*8 show 1,2,3,4,5,6,7,8,9,0”,延时2秒(在这2秒内,点阵显示的1要滚动变成2,滚动效果就是银行门口的字从右到左连贯的切换的那种效果,可以看该网址视频

/v_show/id_XMjE3OTM4NDIw.html)。然

后点阵显示2,再延时2秒(同上)。。。。。。当显示到点阵0后,再过2秒(同上,滚动变为1),此时串口终端换行再次显示“now ,8*8 show 1,2,3,4,5,6,7,8,9,0”。。。。如此往复

二.硬件分析

利用串口调试助手实现串口终端显示“now ,8*8 show 1,2,3,4,5,6,7,8,9,0”

三.程序分析

#include

char keytmp;

char *p;

unsigned char dat;

sbit k=P3^2;

char code str[]="now,8*8show1,2,3,4,5,6,7,8,9,0";

char code distaba[]=

{ // (各数字的阳码)0x00,0x00,0x11,0x21,0x7f,0x01,0x01,0x00, //1

0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00, //2

0x00,0x00,0x49,0x49,0x49,0x7f,0x00,0x00, //3

0x00,0x04,0x0c,0x14,0x24,0x5f,0x04,0x00, //4 0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00, //5 0x00,0x00,0x7f,0x49,0x49,0x49,0x4f,0x00, //6 0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00, //7 0x00,0x00,0x7f,0x49,0x49,0x49,0x7f,0x00, //8 0x00,0x00,0x79,0x49,0x49,0x49,0x7f,0x00, //9 0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00, //0 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

//黑屏,表示一次显示完毕};

char code scan_cona[8]=

{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

//列扫描控制字void delay2ms(int t)

{

int i,j;

for(i=0;i

for(j=0;j<240;j++);

}

void init_com(void)

{

TMOD=0X20;

//定时器工作方式2,初值自动装入 PCON=0X00; //波特率不倍增

SCON=0X40; //串行工作方式1 TH1=0xfd; //定时器初值高位,波特率9600 TL1=0xfd; //定时器初值低位 TR1=1; //启动定时器

}

void fun() //向左滚动显示{

int m,n,h;

for(h=0;h<80;h++) //控制显示字数(80/8=10个) {

for(n=0;n<25;n++) //控制帧移动速度

{

for(m=0;m<8;m++) //显示1帧扫描(分8行,每行亮2ms) {

P2=scan_cona[m];

P0=distaba[m+h];

delay2ms(1);

}

}

}

}

void delay(void) //延时子程序{

int k;

for(k=0;k<600;k++);

}

void InitCom(void)

//串口定义初始化子程序{

TMOD=0x20;

PCON=0x00;

SCON=0x50;

TH1=0xFd;

TR1=1;

}

void send_str()

//发送字符串子程序

{

unsigned char i=0;

while(str[i]!='\0')

{

SBUF=str[i];

while(!TI);

TI=0;

i++;

}

}

void intersvr0(void)interrupt 0 using 1

{

send_str(); //调用发送字符串子程序}

main() //主程序

{

EA=1;

EX0=1;

IT0=0;

while(1)

{

if(RI)

{

dat=SBUF;

RI=0;

}

相关文档
最新文档