51单片机88点阵,使用示波器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; }