找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这个8*16的led共阳点阵单片机程序是哪里错了,谢谢!

[复制链接]
跳转到指定楼层
楼主
本帖最后由 javastory 于 2021-5-7 11:05 编辑

设计一个8*16的led共阳点阵,行用74ls164,列用74hc154,设计思想是行一次输出8位数据,列导通,然后这一列就亮,但是现在显示的效果是全亮,然后一列一列从左向右灭,不到16列的时候灭得就没有规律了,不知道错误原因,请高手帮忙指出错误,谢谢,单片机代码如下:

P2^0--3接74hc154数据端
sbit COW_1641 = P2^4;    //74ls164数据输入

sbit CLK_1641 = P2^5;  



unsigned char colcount[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
unsigned char code image[16] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0xB7,0xB7,0xB7,0xFF};  //字母F,纵向,正序
void delay(unsigned int delay){
        unsigned char i;
        for(;delay>0;delay--)
                for(i=0;i<110;i++);
}



void main(){
        unsigned int col,coldata;                                                                                                               
        unsigned char temp;
        
        P2=0xff;
        while ( 1 ) {
               
                for (col=0;col<16;col++){
                        
                        P2=colcount[col];    //P2^0--3输入,各列轮流输出低电平
                        temp=image[col];
                        CLK_1641 = 0;
                        for(coldata=0;coldata<8;coldata++){
                                CLK_1641 = 0;
                                COW_1641=temp&0x80;
                                CLK_1641 = 1;
                                temp<<=1;
                                delay(200);
                        }
                        CLK_1641 = 1;
                        //delay(500);
                }
        }
}


新手,帮忙指出错误原因,谢谢!

led.jpg (730.26 KB, 下载次数: 40)

led.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:889094 发表于 2021-5-6 22:44 | 只看该作者
虽然没看出楼主的问题,但我想知道楼主为什么用
P2=colcount[col];   
而不是直接P2=col;
col也只用到了16,定义个uchar也够了,没必要uint呀
回复

使用道具 举报

板凳
ID:908996 发表于 2021-5-7 10:00 | 只看该作者
本帖最后由 javastory 于 2021-5-7 10:05 编辑
birdzhyli 发表于 2021-5-6 22:44
虽然没看出楼主的问题,但我想知道楼主为什么用
P2=colcount[col];   
而不是直接P2=col;

这段代码我试过P2=0x01,;P2++;和P2=col;故障现象一样,至于数据类型,你说的是对的,用uchar没有问题,我是在网上找了很多文章例子去看,这段代码也是别人用过的,直接复制过来了。
回复

使用道具 举报

地板
ID:908996 发表于 2021-5-7 10:37 | 只看该作者
另外我把仿真的图发上来,麻烦大家看看程序哪里有错误,不用管那么多点阵,只要管同一行8*16的点阵即可。谢谢!

led.jpg (730.26 KB, 下载次数: 38)

led.jpg
回复

使用道具 举报

5#
ID:844772 发表于 2021-5-7 10:56 | 只看该作者
没看到图,估计列为阳极。我觉得你选的芯片跟你想法不同啊,按你的操作:一是,74ls164初始是全LOW,74hc154初始全H,自然全亮了;二是,你每次操纵154一个脚L,所以逐列关,当然你没用BCD码,所以后来有点乱;三是, P2=colcount[col];  会影响164的clk啊。
回复

使用道具 举报

6#
ID:908996 发表于 2021-5-7 11:09 | 只看该作者
glinfei 发表于 2021-5-7 10:56
没看到图,估计列为阳极。我觉得你选的芯片跟你想法不同啊,按你的操作:一是,74ls164初始是全LOW,74h ...

图刚才刚发了,不知道为什么看不到,不过行是阳用164,列是阴用154.

至于说P2=0--15,这个我也是看了很多网上的例子,我考虑是0--15转成2进制后,用的是4位的编码,是0000--1111,影响的是P2^0--P2^3的值,后面的164接的P2^4--P2^7不影响,不知道这样理解是否对?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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