51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > C51教程 > 详细内容
【吉林科技大学】第三章:89S51实践课题--点阵式图形
发布时间:2009/6/16  阅读次数:4992  字体大小: 【】 【】【

Lesson 25

1. 实验任务
在8X8点阵式LED显示“★”、“●”和心形图,通过按键来选择要显示的图形。
2. 电路原理图
  
3. 硬件系统连线
(1). 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上;
(2).   把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上;
(3).   把“单片机系统”区域中的P2.0/A8端子用导线连接到“独立式键盘”区域中的SP1端子上;
4. 程序设计内容
(1).   “★”在8X8LED点阵上显示图如下图所示
1 2 3     4 5  6   7   8
12H,14H,3CH,48H,3CH,14H,12H,00H
(2).   “●”在8X8LED点阵上显示图如下图所示
1 2 3     4 5  6   7   8
00H,00H,38H,44H,44H,44H,38H,00H
(3).   心形图在8X8LED点阵上显示图如下图所示
1 2 3     4 5  6   7   8
30H,48H,44H,22H,44H,48H,30H,00H
5. 汇编源程序
CNTA               EQU 30H
COUNT       EQU 31H
                                     ORG 00H
                                     LJMP START
                                     ORG 0BH
                                     LJMP T0X
                                     ORG 30H
START:           MOV CNTA,#00H
                                     MOV COUNT,#00H
                                     MOV TMOD,#01H
                                     MOV TH0,#(65536-4000) / 256
                                     MOV TL0,#(65536-4000) MOD 256
                                     SETB TR0
                                     SETB ET0
                                     SETB EA
WT:                       JB P2.0,WT
                                     MOV R6,#5
                                     MOV R7,#248
D1:                         DJNZ R7,$
                                     DJNZ R6,D1
                                     JB P2.0,WT
                                     INC COUNT
                                     MOV A,COUNT
                                     CJNE A,#03H,NEXT
                                     MOV COUNT,#00H
NEXT:             JNB P2.0,$
                                     SJMP WT
T0X: NOP
                                     MOV TH0,#(65536-4000) / 256
                                     MOV TL0,#(65536-4000) MOD 256
                                     MOV DPTR,#TAB
                                     MOV A,CNTA
                                     MOVC A,@A+DPTR
                                     MOV P3,A
                                     MOV DPTR,#GRAPH
                                     MOV A,COUNT
                                     MOV B,#8
                                     MUL AB
                                     ADD A,CNTA
                                     MOVC A,@A+DPTR
                                     MOV P1,A
                                     INC CNTA
                                     MOV A,CNTA
                                     CJNE A,#8,NEX
                                     MOV CNTA,#00H
NEX:                 RETI
TAB:                   DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
GRAPH:       DB 12H,14H,3CH,48H,3CH,14H,12H,00H
                                     DB 00H,00H,38H,44H,44H,44H,38H,00H
                                     DB 30H,48H,44H,22H,44H,48H,30H,00H
                                     END
6. C语言源程序
#include <AT89X52.H>
unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code graph[3][8]={{0x12,0x14,0x3c,0x48,0x3c,0x14,0x12,0x00},
                                                               {0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00},
                                                               {0x30,0x48,0x44,0x22,0x44,0x48,0x30,0x00}
                                                             };
unsigned char count;
unsigned char cnta;
void main(void)
{
   unsigned char i,j;
   TMOD=0x01;
   TH0=(65536-4000)/256;
   TL0=(65536-4000)%256;
   TR0=1;
   ET0=1;
   EA=1;
   while(1)
       {
           if(P2_0==0)
               {
                   for(i=5;i>0;i--)
                   for(j=248;j>0;j--);
                   if(P2_0==0)
                       {
                           count++;
                           if(count==3)
                               {
                                   count=0;
                               }
                           while(P2_0==0);
                       }
               }
       }
}
void t0(void) interrupt 1 using 0
{
   TH0=(65536-4000)/256;
   TL0=(65536-4000)%256;
   P3=tab[cnta];
   P1=graph[count][cnta];
   cnta++;
   if(cnta==8)
       {
           cnta=0;
       }
}
  
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号