找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3695|回复: 7
打印 上一主题 下一主题
收起左侧

单片机按键控制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()
{
        P0=0xff;
        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];[ i]
        P1=_crol_(P1,1);               
        j=(j+1)%8;
}
//INT0中断(定时器由键盘中断启动)
void Key_Down() interrupt 0
{
        P0=0xff;
        P1=0x80;
        j=0;
        i=(i+1)%3;                                //i在0,1,2中取值,因

为只要3个图形


问题如下
1.P0=0xff;P1=0xff-------这条语句是端口初始化不?

2.IE=0x83 ---- 1000 0011为什么是这个值?寄存器配置?

3.P0=0xff;                                
  P0=~M[ i][j];
  P1=_crol_(P1,1);               
  j=(j+1)%8;-----------------P0赋初值?P0给值?后面的就看不懂了

4.我用proteus仿真试了下,只有在按键按下的时候,才会显示图形,这样就是外

部中断。那定制器中断有何意义呢?

5.i=(i+1)%3---------为什么要(i+1)%3这样一个表达式再赋值给i呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:332444 发表于 2020-7-6 13:07 | 只看该作者
像这样显示图形根本就用不着使用中断,若要学习中断有很多例子是需要使用中断的理由,如频率计,中断型时钟,中断通讯等。这个例子的定时器只是用于点阵的延时人眼暂留时间而已,其实用计数延时即可,因为延时有一定范围,不需要很精确。
回复

使用道具 举报

板凳
ID:332444 发表于 2020-7-6 13:10 | 只看该作者
3个图形,每个图形8个数据,也可以改写为if(++i>=3)i=0;if(++j>=8)j=0;
回复

使用道具 举报

地板
ID:332444 发表于 2020-7-6 13:22 | 只看该作者

回复

使用道具 举报

5#
ID:668004 发表于 2020-7-7 14:12 | 只看该作者
xianfajushi 发表于 2020-7-6 13:10
3个图形,每个图形8个数据,也可以改写为if(++i>=3)i=0;if(++j>=8)j=0;

你技术不错
回复

使用道具 举报

6#
ID:332444 发表于 2020-7-7 14:22 | 只看该作者

多谢!玩玩而已,不过是卖油翁的典故,玩多了自然的事。
回复

使用道具 举报

7#
ID:668004 发表于 2020-7-7 15:34 | 只看该作者
xianfajushi 发表于 2020-7-7 14:22
多谢!玩玩而已,不过是卖油翁的典故,玩多了自然的事。

说的很好
回复

使用道具 举报

8#
ID:913475 发表于 2021-4-28 11:56 | 只看该作者
您好,我51类似的程序遇到问题:按键控制点阵LED ,第二个按键不能打断第一个按键,需要等13s时延,请问什么问题呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表