555|8

3241

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

两位595驱动8位共阴极数码管的程序问题 [复制链接]

原理图

代码:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char 
 

uchar code Table[] = 
{ // 0	 1	  2	   3	4	 5	  6	   7	8	 9	  A	   b	C    d	  E    F    - 
	0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x86,0xFF,0xbf
};
 //-----------------------------------------------------------------------------

sbit SER = P1^0;	//串行数据输入端
sbit STCP = P1^1;	//时钟脉冲信号——上升沿有效 存储寄存器时钟输入端,并行输出
sbit SHCP = P1^2;	//输入信号————上升沿有效 移位寄存器时钟输入端

sbit key1 = P3^0;	//选择键
sbit key2 = P3^1;	//加键
sbit key3 = P3^2;	//减键
sbit key4 = P3^3;

uchar shan,A,K,C,D,E,F;
uchar knum;		//选择键计数变量

void TimerInit();
void KeyScan();
void Display (uchar shi10,uchar shi,uchar fen10,uchar fen,uchar miao10,uchar miao);	// 数码管显示
void SMG_Int(uchar Dat);		// 数码管单字节串行移位函数

//*****************************************************************************
// 主程序
void main () 
{
	TimerInit();
	while(1)
	{
		Display (A,K,C,D,E,F);
		KeyScan();
	} 
}

void KeyScan()
{
	
}


void Display (uchar shi10,uchar shi,uchar fen10,uchar fen,uchar miao10,uchar miao)
{
	uchar i;

	//显示第1位	小时10位
	i = Table[shi10];

	SMG_Int(i);			
	SMG_Int(0x01);		

	STCP = 0;	 //数据并行输出,(借助上升沿)
	_nop_();
	_nop_();
	STCP = 1;

	//显示第2位	小时个位
	i = Table[shi];

	SMG_Int(i);		
	SMG_Int(0x02);		

	STCP = 0;
	_nop_();
	_nop_();
	STCP = 1;

	//显示第3位	-
	if(shan<10)	 //"-" 闪烁
	i = Table[16]; 
	else 
	i = Table[15];
	SMG_Int(i);			
	SMG_Int(0x04);	

	STCP = 0;
	_nop_();
	_nop_();
	STCP = 1;

	//显示第4位	分钟10位
	i = Table[fen10];

	SMG_Int(i);			
	SMG_Int(0x08);		

	STCP = 0;
	_nop_();
	_nop_();
	STCP = 1;

	//显示第5位	分钟个位
	i = Table[fen];

	SMG_Int(i);			
	SMG_Int(0x10);	

	STCP = 0;
	_nop_();
	_nop_();
	STCP = 1;

	//显示第6位	-
	if(shan<10)	   //"-" 闪烁
	i = Table[16];
	else 
	i = Table[15];

	SMG_Int(i);			
	SMG_Int(0x20);	

	STCP = 0;
	_nop_();
	_nop_();
	STCP = 1;

	//显示第7位	秒10位
	i = Table[miao10];

	SMG_Int(i);			
	SMG_Int(0x40);	

	STCP = 0;
	_nop_();
	_nop_();
	STCP = 1;

	//显示第8位	秒个位
	i = Table[miao];

	SMG_Int(i);		
	SMG_Int(0x80);	

	STCP = 0;
	_nop_();
	_nop_();
	STCP = 1;
}

void SMG_Int(uchar Dat)	 //通过8次循环将8位数据移入74HC595
{
	uchar i;
	for(i=8;i>=1;i--)
	{
		if (Dat & 0x80) 
		{
			SER = 1;
		} 
		
		else
		{ 
			SER = 0;
		}
		Dat <<= 1;
		SHCP = 0;
		_nop_();
		_nop_();
		SHCP = 1;
	}
}

void TimerInit()	 //定时器0初始化
{
	TMOD = 0x01;
	TH0 = (65536-50000)/256;	//50ms初值
	TL0 = (65536-50000)%256;
	EA = 1;
	ET0 = 1;
	TR0 = 1;

}

void Timer0() interrupt 1
{
	static uchar cnt,shi=12,fen=59,miao=30;
	
	TH0 = (65536-50000)/256;
	TL0 = (65536-50000)%256;
	
	shan++;
	if(shan==20)
		shan=0;

	cnt++;
	if(cnt==20)
	{
		cnt = 0;
		miao++;
		if(miao == 60)
		{
			miao = 0;
			fen++;
			if(fen==60)
			{
				fen = 0;
				shi++;
				if(shi==24)
				{
					shi=0;
				}
			}
		}
	}

	A=shi/10;
	K=shi%10;
	C=fen/10;
	D=fen%10;
	E=miao/10;
	F=miao%10;
}



 

由共阳极改的,改了段码表,可是程序显示乱码,个别数码管什么都不显示。

请问高手,如何解决?谢谢

此帖出自51单片机论坛

最新回复

你让段选全输出,看看数码管能不能全亮。   详情 回复 发表于 2024-11-22 09:04
点赞 关注
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 

回复
举报

6802

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

这个程序和硬件电路需要结合起来查找

此帖出自51单片机论坛

点评

谢谢,硬件有问题吗  详情 回复 发表于 2024-11-22 08:30
 
 
 

回复

3241

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
Jacktang 发表于 2024-11-22 07:29 这个程序和硬件电路需要结合起来查找

谢谢,硬件有问题吗

此帖出自51单片机论坛
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

235

帖子

0

TA的资源

一粒金砂(高级)

4
 

就是8个8字显示,一个595负责段码,一个595负责位码,你把所有的组合写到纸上,程序里从0到9,挨个儿显示一遍,中间加长延时,然后就能发现问题了。不过位码595不加三极管驱动,不知道能不能驱动7段全亮的电流。

此帖出自51单片机论坛
 
 
 

回复

7159

帖子

2

TA的资源

版主

5
 

你让段选全输出,看看数码管能不能全亮。

此帖出自51单片机论坛
 
 
 

回复

3241

帖子

0

TA的资源

纯净的硅(高级)

6
 

谢谢,回去试试

此帖出自51单片机论坛
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

3241

帖子

0

TA的资源

纯净的硅(高级)

7
 

还有一个问题,我两个595驱动数码管,段选和位选没弄反吧?谢谢

此帖出自51单片机论坛
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

3241

帖子

0

TA的资源

纯净的硅(高级)

8
 

我把程序改成共阴极断码表,显示如下

 

此帖出自51单片机论坛
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

3241

帖子

0

TA的资源

纯净的硅(高级)

9
 

再问个问题,位选不用变吧

此帖出自51单片机论坛
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
21天学通C++(第四版)

:) :) :)

MCU一上电就睡眠时怎么下载?

MCU中的代码一上电就进入深度睡眠,现在用JTAG的SWD接口没法下载了。各路大侠有什么高招吗?

BEAGLEBONE+扩展板+鼠标进入LINUX 图形界面,已经可以浏览网页、显示照片和编写文档了

BEAGLEBONE这么好的开发板,没有图形系统还只是在终端里调试那些枯燥的字符,真的很可惜。 所以我给他加了一个微型但是分辨率高 ...

摇摇光影简版--基于MSP-EXP430FR5739 视频演示

视频录的效果太差,摄像头不知道怎么回事总是音视频不同步。截两张图,免得看不下去我的视频的可以看看图片最后的乐曲有可能因为 ...

【暑假酷学】写一个程序(工程项目)该怎么一步步去做?

昨晚上写这个帖子的时候写的有点随意,呵呵,就像一个没有做好 规划 和 设计的程序。这里,请允许我补充一些说明。 尽 ...

针对恶劣工业环境选择以太网的三大注意事项

在以太网取得了突飞猛进发展的当代,现已在商业和企业市场上得到了大量的应用。由于它具有定义明确的标准和易于部署的特性, ...

谁能跟我讲一下,下图的频带中心怎么个求法?

本帖最后由 sunboy25 于 2020-12-13 10:46 编辑 516109 我想问一下,这上面这个频带中心是什么东西,它是怎么个求法,才得 ...

AM3354 GPMC 16word突发怎么触发以及能否缩短两次传输之间的时间

在CCS上使用AM3354的GPMC接口往FPGA发送数据的时候采用了直接向地址空间里写数据的方式触发的传输,但是变量最多定义到64位,这 ...

2024年7月 TIOBE 编程指数

七月头条:Rust正在为进入前十名做准备 本月,高性能语言 Rust 在TIOBE指数中从第17位跃升至第13位。这是Rust的历史新高。提 ...

测评汇总:超小型 Linux 开发套件:Quantum Tiny Linux(带 SoM 和扩展板)

活动详情:【超小型 Linux 开发套件:Quantum Tiny Linux(带 SoM 和扩展板)】更新至 2024-08-22测评报告汇总:@硬核王同学 【 ...

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表