找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机倒计时器焊接后无显示,请求下工科的大佬们

[复制链接]
跳转到指定楼层
楼主
学文历史的,最近迷上了弄单片机,自己学了一段时间尝试写了个倒计时器(已经尽力了),在proteus上运行的很好。特地找了朋友焊上了但是一开电数码管没有显示,打开那个P3^1/TXD那个端口就亮了,但是很亮,数字也变成相同的了。已经查了很多次资料,单片机也废了好几个了,真心求教,真的对单片机感兴趣。

单片机代码:
#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit one_place=P2^1;
sbit ten_place=P2^0;
sbit features1=P1^0;//star开始
sbit features2=P1^1;//stop停止
sbit features3=P1^2;//reset复位
sbit beep=P3^0;
sbit aa=P3^1;//蜂鸣器停止
uchar code table[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar num,num1=11,num2,ten,one;
void timer_init(void)
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=0;
}
void delay(uint n)
{while(n--);
}
void check()
{

   if(aa==0){beep=1;}
   if(features1==0){TR0=1;}
   if(features2==0){TR0=0;}
   if(features3==0){TR0=0;TH0=(65536-50000)/256;                        
                          TL0=(65536-50000)%256;num1=11;}
           
}
void display()
{
P2=0xff;
P0=0xff;
}
void main(void)
{
beep=1;
timer_init();
display();
if(features1==1){TR0=0;}
while(1)
{
check();
one_place=1;
P0=table[one];
delay(100);
one_place=0;
delay(100);
ten_place=1;
P0=table[ten];
delay(100);
ten_place=0;
delay(100);
}
}
void Timer0()interrupt 1                          
{

TH0=(65536-50000)/256;                        
TL0=(65536-50000)%256;
num++;
if(num==20)                                            
{
   num=0;                                                
   num1--;                                                
   if(num1==0)
    {TR0=0;
    beep=0;}
   ten=num1/10;
   one=num1%10;

}
}

IMG20191207233320.jpg (3.3 MB, 下载次数: 26)

开始前按了复位键才亮

开始前按了复位键才亮

IMG20191207233328.jpg (3.71 MB, 下载次数: 13)

开始以后

开始以后

51hei图片20191207223434.png (69.71 KB, 下载次数: 12)

原理图

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

使用道具 举报

沙发
ID:213173 发表于 2019-12-8 06:59 | 只看该作者
图中P0到LCD之间要串接8个510欧左右限流电阻,否则有烧P0口的风险。Q1、Q3的C、E极接反了,R2、R3改1~3K为宜。
回复

使用道具 举报

板凳
ID:25310 发表于 2019-12-8 08:31 | 只看该作者
Q1,Q3 要加限流电阻吧,开关加上拉电阻,端口设置高阻。P31这个开关也要加上拉,定时器初始化也没加初值。
回复

使用道具 举报

地板
ID:524818 发表于 2019-12-8 09:01 | 只看该作者
P0口没接上拉电阻啊?单片机废了是什么意思,不能显示就是废了?
回复

使用道具 举报

5#
ID:396245 发表于 2019-12-8 09:26 | 只看该作者
proteus仿真能运行说明程序基本没问题,问题应该出在硬件上,排电路版另一面来看一下
回复

使用道具 举报

6#
ID:470332 发表于 2019-12-8 09:34 | 只看该作者
P0的8个端口要加上拉电阻
回复

使用道具 举报

7#
ID:94031 发表于 2019-12-8 10:30 | 只看该作者
要想调通先把原理搞清楚,然后按功能分步查。
回复

使用道具 举报

8#
ID:158375 发表于 2019-12-8 11:58 | 只看该作者
原理图与实物照片不同哦。
回复

使用道具 举报

9#
ID:235200 发表于 2019-12-8 14:00 | 只看该作者
void timer_init(void)
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=0;
}
定时计数器0方式1的定时未开启,所以不会发一定时中断
回复

使用道具 举报

10#
ID:235200 发表于 2019-12-8 14:05 | 只看该作者
初始化显示
void display()
{
P2=0xff;
P0=0xff;
}
要使P0输出高电平,电路P0口要接上拉电阻
回复

使用道具 举报

11#
ID:235200 发表于 2019-12-8 14:09 | 只看该作者
电路图中Q1Q3所接5V电源应该接在发射极,接在集电极达不到控制的目的,
回复

使用道具 举报

12#
ID:658533 发表于 2019-12-8 17:35 | 只看该作者
把各位的综合了下,把程序改了 定时器附加了初值 加入了上拉电阻,但是PNP极性对调了以后仿真就出现了乱码 按原来的接法可以正常运行。。
底下是改后的代码:
#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit one_place=P2^1;
sbit ten_place=P2^0;
sbit features1=P1^0;//star
sbit features2=P1^1;//stop
sbit features3=P1^2;//reset
sbit beep=P3^0;
sbit aa=P3^1;         
uchar code table[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar num,num1=11,num2,ten,one;
void timer_init(void)
{
TMOD=0x01;
EA=1;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;
ET0=1;
TR0=1;
}
void delay(uint n)
{while(n--);
}
void check()
{
   
   if(aa==0){beep=1;}
   if(features1==0){TR0=1;}
   if(features2==0){TR0=0;}
   
          
}
void display()
{
P2=0xff;
P0=0xff;
}
void main(void)
{
beep=1;
timer_init();
display();
if(features1==1){TR0=0;}
while(1)
{
check();
one_place=1;
P0=table[one];
delay(100);
one_place=0;
delay(100);
ten_place=1;
P0=table[ten];
delay(100);
ten_place=0;
delay(100);
}
}
void Timer0()interrupt 1                          
{

TH0=(65536-50000)/256;                        
TL0=(65536-50000)%256;
num++;
if(num==20)                                            
{
   num=0;                                                
   num1--;                                                
   if(num1==0)
    {TR0=0;
    beep=0;}
   ten=num1/10;
   one=num1%10;
                                    
}
}

51hei图片20191208172349.png (36.87 KB, 下载次数: 12)

原接法

原接法

51hei图片20191208172456.png (72.53 KB, 下载次数: 9)

对调极性

对调极性
回复

使用道具 举报

13#
ID:658533 发表于 2019-12-8 17:37 | 只看该作者
笨笨兔 发表于 2019-12-8 11:58
原理图与实物照片不同哦。

那个一个三极管和电阻不用管,那个是我按照朋友的建议加的电源的led也是
回复

使用道具 举报

14#
ID:658533 发表于 2019-12-8 17:37 | 只看该作者
cphnkj188 发表于 2019-12-8 09:01
P0口没接上拉电阻啊?单片机废了是什么意思,不能显示就是废了?

直接冒烟 烧坏了
回复

使用道具 举报

15#
ID:659452 发表于 2019-12-9 11:30 | 只看该作者
需要加上拉电阻
回复

使用道具 举报

16#
ID:659452 发表于 2019-12-9 11:30 | 只看该作者
没有上拉电阻容易烧坏单片机
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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