找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4088|回复: 11
收起左侧

数码管不亮 求大神指教

[复制链接]
ID:77317 发表于 2015-4-20 10:15 | 显示全部楼层 |阅读模式
# include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
u8 code d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 code dp[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
u8 code w[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
u8 dat,flag,datavalue=0;
sbit beep=P3^7;
sbit LED=P3^6;

/******************************************************

函数名称:    deplay(u16 t)
函数功能:    产生时间延时
入口参数:   t
出口参数:   无
备注:
*******************************************************/

void delay(u16 t)
{
u8 i;
while(t--)
{
for (i=0;i<19;i++);
}
}

/*******************************************************

函数名称:  beepon()
函数功能:    让蜂鸣器短暂发声用来作为发送和接收数据指示
入口参数:   无
出口参数:   无
备注:

******************************************************/

void beepon()
{
beep=0;
delay(500);
beep=1;
}

/********************************************************

函数名称:                 LEDflash()
函数功能;                 让发光二极管闪耀
入口参数:                 无
出口参数:                 无
备注:

********************************************************/

void LEDflash()
{
LED=0;
delay(300);
LED=1;
}

/*******************************************************

函数名称:                   UART_inin()
函数功能;                    串行通信初始化函数,做好发送和接收的准备
入口参数:                        无
出口参数:                        无
备注:

********************************************************/

void UART_init()
{
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}

/******************************************************

函数名称:            display(u16 k)          
函数功能;                显示向pc发出的数据和pc发来的数据
入口参数:                k
出口参数:                无       
备注:
                                  
*****************************************************/

void display(u16 k)
{
P0=d[k/1000];
P2=w[3];
delay(30);

P0=d[k/100%10];
P2=w[2];
delay(30);

P0=d[k/10%10];
P2=w[1];
delay(30);

P0=d[k%10];
P2=w[0];
delay(30);

P1=0x00;
}

/******************************************************

函数名称:            send()          
函数功能;                向pc发送数据
入口参数:                无
出口参数:                无       
备注:
                                  
*****************************************************/

void send()
{
ES=0;                             //暂时关闭串行中断,否则会又会进入中断服务程序,把a=SBUF;flag=1;
flag=0;
SBUF=datavalue;
while(!TI);                         //如果TI=1,就把它等待
TI=0;                                 //一旦TI=0,就把它清零
ES=1;                                 //闭合串行中断开关
}

/******************************************************

函数名称:            main()          
函数功能;                初始化串口,连续判断遥控器哪个键按下并做相应的处理
入口参数:                无
出口参数:                无       
备注:
                                  
*****************************************************/

main()
{
P1=0xff;
UART_init();                                  //置输入状态
while(1)                                         //串口工作前的准备工作
{
dat=(P1&0x0f);                                //把遥控器按键状态通过P1口送给变量dat
if(dat==0x08)              //遥控器A键按下
{
delay(120);
dat=0;
beepon();
LEDflash();
datavalue++;
dat=0;
send();
}
if(dat==0x02)                                //C键按下,清零
{
delay(120);
dat=0;
beepon();
LEDflash();
datavalue=0;
send();
}

if(dat==0x01)                                //按下D键就发送
{
delay(120);
beepon();
LEDflash();
datavalue--;
send();
}
display(datavalue);                        //将读到的数显示
}
}

/******************************************************

函数名称:            serial(void) interrupt 4          
函数功能;                通过串行中断服务函数接收从PC发来的数据
入口参数:                无
出口参数:                无       
备注:                    串行中断的中断号是4
                                  
*****************************************************/

void serial(void) interrupt 4
{
RI=0;
datavalue=SBUF;                //将串口接收到的数据保存到datavalue变量中
display(datavalue);        //显示接收的数据
flag=1;                                //置收到数据的标志
beepon();                        //蜂鸣器响一声
LEDflash();                        //发光二极管闪一下
}

回复

使用道具 举报

ID:69862 发表于 2015-4-20 23:42 | 显示全部楼层
像你这种情况,没有原理图,不好下定论,我也给你一点小小的建议,在写一个程序,或者做一个小功能的时候,最好要有一定的思路,比如上面的程序,里面包括“显示”“蜂鸣器”“串口”“按键”如果是我,我会这样做:
1、先把串口程序调通,你可能会问,为什么要先写串口呢?我会这样告诉你,单片机中,只有串口才是最好的人机界面,有了串口,就可以查看很多变量的值和一些计算过后的数据。再也告别在软件上面仿真了。
2、数码管显示:首先让数码管亮起来,当亮起来那一瞬间,你会发现,数码管是如此的简单,亮了又该如何?现在就可以显示固定的数据了,比如在数码管上面显示1234十进制数,显示就成功一半了,最后把你想显示的数据,用一个变量的形式,通过形参传递给显示函数。显示就写完了。
3、然后就是按键和蜂鸣器,这两个比较简单,就不我说了,这个是我平时写程序的大致流程,希望对你有帮助。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:948 发表于 2015-4-23 09:20 | 显示全部楼层
采用领信号法测一下

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:948 发表于 2015-4-23 09:20 | 显示全部楼层
查线路

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:948 发表于 2015-4-23 09:21 | 显示全部楼层
查元件
回复

使用道具 举报

ID:948 发表于 2015-4-23 09:21 | 显示全部楼层
多想想
回复

使用道具 举报

ID:72643 发表于 2015-4-23 10:50 | 显示全部楼层
版主说的很对!顶一下
回复

使用道具 举报

ID:71743 发表于 2015-4-24 10:04 | 显示全部楼层
看看硬件的线路,如果是595的话,检查下时序,对不?

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:77958 发表于 2015-4-24 20:29 | 显示全部楼层
如果程序无误,就看看电路,电阻值是否正确

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:78137 发表于 2015-4-26 17:18 | 显示全部楼层
如果程序无误总加压实时间,就看看电路,电阻值是否正确

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:78145 发表于 2015-4-26 18:47 | 显示全部楼层
看看原理图有没有用三极管作驱动。

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:153199 发表于 2016-12-31 12:28 | 显示全部楼层
硬件软件结合看
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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