找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的16*16点阵动态显示程序怎么改

[复制链接]
跳转到指定楼层
楼主
以下程序是两个字的动态显示,怎么改成八个字动态显示
#include<reg52.h>#define  uchar unsigned char #define  uint unsigned intuchar code col[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};  uchar code row[][32]={{0x00,0x08,0x00,0x04,0x00,0x03,0xE0,0x00,0x00,0x00,0x00,0x40,0x00,0x80,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x0E,0x00,0x00,},    //显示 字码:你{0x00,0x88,0x00,0x68,0x3E,0x09,0x22,0x09,0x2A,0x29,0x32,0xC9,0x22,0x09,0xFE,0x0F,0x22,0x29,0x32,0xC9,0x2A,0x09,0x22,0x09,0x3E,0x29,0x00,0xC8,0x00,0x08,0x00,0x00,},       // 显示字码:好 };          void delayms(uint t)                           //每1延时1ms{     uint x,y;     for(x=t;x>0;x--)         for(y=124;y>0;y--);}                                                void display(uint n)          //n为显示字码的序数{     uint i,j;         for(j=0;j<10;j++)         for(i=0;i<16;i++)         {             if(i<8) P2=col[i],P3=0xff;                  else  P2=0xff, P3=col[i-8];                      P0=row[n][2*i];                 P1=row[n][2*i+1];                 delayms(3);                                            }                                   }                         void main(){     while(1)                   {                 display(0);                 delayms(50);             display(1);                 delayms(50);                 }         }   
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:111634 发表于 2016-11-2 12:08 | 只看该作者
本帖最后由 zl2168 于 2016-11-2 14:53 编辑

上述程序中uint全部改为uchar(这不是错误,而是没必要)。
回复

使用道具 举报

板凳
ID:111634 发表于 2016-11-2 12:09 | 只看该作者
if(i<8) P2=col[i],P3=0xff;                  else  P2=0xff, P3=col[i-8];                      语句格式有错
回复

使用道具 举报

地板
ID:111634 发表于 2016-11-2 12:11 | 只看该作者
code中要有八个字。
回复

使用道具 举报

5#
ID:111634 发表于 2016-11-2 12:12 | 只看该作者
显示循环序数改为8
回复

使用道具 举报

6#
ID:144183 发表于 2016-11-2 13:09 | 只看该作者

你好,那要怎么改
回复

使用道具 举报

7#
ID:144183 发表于 2016-11-2 13:11 | 只看该作者
zl2168 发表于 2016-11-2 12:12
显示循环序数改为8

按你说的改了,好像刷新时间太快,要改上面的吗
回复

使用道具 举报

8#
ID:140371 发表于 2016-11-2 14:23 | 只看该作者
將row數組(陣列) 用一組{} 包圍就好 ,增加到8個漢字的內容,結束用 ;
將 main() 改成下列這樣  
void main()
{ char i,j;     
while(1)                  
        {
        for(j=0;j<8;j++) //有8個字形輪流顯示
                {
                 for(i=0;i<2;i++) ////每個字形顯示時間的長度
                 display(j);
                }
                                                                       
        }         
}  

  

如果有殘影則加上 關閉顯示器
如下:                                          
void display(uint n)         
{     uint i,j;         
        for(j=0;j<10;j++)
                                       
        for(i=0;i<16;i++)         
                {
                                P0=0; //
                                P1=0; //
                       
                if(i<8) P2=col[i],P3=0xff;                  
                else  P2=0xff, P3=col[i-8];
                       
                 P0=row[n][2*i];               
                 P1=row[n][2*i+1];                 
                 delayms(3);                                            
                }                                   
}  

您試看看...
回复

使用道具 举报

9#
ID:148069 发表于 2016-11-16 14:32 | 只看该作者
论坛里有的
回复

使用道具 举报

10#
ID:111634 发表于 2016-11-16 14:42 | 只看该作者
本帖最后由 zl2168 于 2016-11-16 14:44 编辑

实例66  LED 16×16点阵扫描显示汉字


Proteus仿真一下,确认有效。
实例66a LED 16×16点阵汉字显示.rar (48.21 KB, 下载次数: 12)


以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1
书中电路和程序设计有详细说明,程序语句条条有注解。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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