找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

帮忙分析一下数码管显示问题

[复制链接]
admin 发表于 2012-9-2 05:36:11 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
#include<reg52.h> //包含单片机寄存器的头文件
#define uchar unsigned char
#define uint unsigned int
/* 函数申明 -----------------------------------------------*/
void delay(uint z);
void send595(uchar dat);
void out595(void);
void disp(uchar w,uchar d);
void dispoff();
/* 变量定义 -----------------------------------------------*/
sbit MOSIO=P2^2;
sbit R_CLKa=P2^3;
sbit S_CLKa=P2^4;
uchar code duan[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};//此表为LED共阳级数码管段选字模
uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //此表为LED数码管位选字模

/*
********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
********************************************************************************
*/
void main()
{
uchar i;
dispoff(); //先关闭数码管
while(1)
{
for(i=0;i<8;i++) //移动显示数码管0-7
{
disp(i,i);
delay(700);
}
}
}
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
/*
********************************************************************************
** 函数名称 : send595(uchar dat)
** 函数功能 : 数据输入
********************************************************************************
*/
void send595(uchar dat) //数据输入
{
uchar i;
for(i=0;i<8;i++)
{
if((dat<<i)&0x80)
MOSIO=1;
else MOSIO=0;

S_CLKa=0;
S_CLKa=1;
}
}
/*
********************************************************************************
** 函数名称 : out595(void)
** 函数功能 : 数据输出
********************************************************************************
*/
void out595(void) // 数据输出
{
R_CLKa=0;
R_CLKa=1; //上升沿
}
/*
********************************************************************************
** 函数名称 : disp(uchar w,uchar d)
** 函数功能 : 数码管显示函数
********************************************************************************
*/
void disp(uchar w,uchar d) //数码管显示函数:w-位码,d-段码
{
send595(wei[w]); //发送位选
send595(wei[w]);
out595();
send595(duan[d]); //发送段选
out595();
}
/*
********************************************************************************
** 函数名称 : dispoff()
** 函数功能 : 关闭共阳数码管
********************************************************************************
*/
void dispoff() //关闭共阳数码管
{
send595(0); //位选全为0,对共阳极而言即端开
send595(0);
out595();

send595(0xff); //段选全为1,对共阳极段为0时才有可能点亮,这样就被关闭
out595();
}
5_184975_061c4d805141820.jpg
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 01:35 , Processed in 0.058894 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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