找回密码
 立即注册

QQ登录

只需一步,快速开始

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

为什么这个单片机电路没有排阻没有驱动依然可以运行求专业详细解答

  [复制链接]
跳转到指定楼层
楼主
100黑币
  1. #include<Reg52.h>
  2. int SELECT[8]={0X7F,0XBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE};         //位选数组
  3. int LED[17]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71,0X40};
  4. //LED数码管字形码集合数组
  5. int SELECT1[2][4]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//筛选异或结果集合数组
  6. int DISPLAY[8]={0X40,0X40,0X40,0X40,0X40,0X40,0X40,0X40};//初始化显示数组
  7. int flag;

  8. void delay(int ms)
  9. {
  10.         int i,j;
  11.         for(i=ms;i>0;i--)
  12.                 for(j=110;j>0;j--);      
  13. }
  14. //延时函数 (1ms)

  15. void display(int wei,int L[])//wei为位选数目
  16. {         
  17.         int k;
  18.         for(k=0;k<wei;k++){
  19.                 P0=SELECT[wei-1-k];
  20.                 P2=L[k];
  21.                 delay(1);
  22.                 P2=0X00;//消隐
  23.         }
  24. }//显示函数——P0位选,P2段选

  25. int button(int pp,int new)//p1为0X0F(筛选行)或0XF0(筛选列)
  26. {        int a,p,q,m;//new为当前P1端口按键状态,a为异或结果,p、q为循环计数变量,m为所在行、列
  27.         if(new==pp)
  28.                 {flag=0;return flag;}        //未有按键按下标志
  29.         else{
  30.                 delay(1);
  31.                 if(new!=pp)
  32.                 {      
  33.                         a=new^pp;
  34.                         for(p=0;p<2;p++)
  35.                                 for(q=0;q<4;q++)
  36.                                         if(SELECT1[p][q]==a) m=q+1;        //遍历异或结果集合数组后找到所在行、列
  37.                         }
  38.                 return m;
  39.                 }//筛选出行或列
  40. }//判断按键所在行列位置,P1为按键接口端

  41. void main()
  42. {        int x,y,sum,n,temp;//x为行,y为列,sum为键值
  43.         while(1){
  44.         P1=0X0F;temp=P1;
  45.         x=button(0X0F,temp);
  46.         P1=0XF0;temp=P1;//用于判断是否是新的按键值
  47.         y=button(0XF0,temp);
  48.         if(y==0)
  49.                 display(8,DISPLAY);
  50.         else{
  51.                 flag++;
  52.                 sum=4*(x-1)+(y-1);
  53.                 if(flag==1)
  54.                         for(n=0;n<7;n++)
  55.                                 DISPLAY[n]=DISPLAY[n+1];
  56.                         DISPLAY[7]=LED[sum];//更改显示数组
  57.                 display(8,DISPLAY) ;
  58.         }
  59.         }
  60. }
  61. {  uchar sound;
  62.   for(sound=50;sound>0;sound--)
  63.   {
  64.    speaker=0;
  65.    delay(1);
  66.    speaker=1;
  67.    delay(1);
  68.   }}                                                                        
复制代码

最佳答案

查看完整内容

没用过这个单片机,如果它的IO口可以设置强推挽输出,你看一下相应的PDF,再配置一下相关的寄存器就可以了
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:377210 发表于 2021-1-3 12:31 | 只看该作者
kanadexiw 发表于 2021-1-3 22:00
at89c51也可以设置强推挽输出吗?具体如何设置呢求大佬解答

没用过这个单片机,如果它的IO口可以设置强推挽输出,你看一下相应的PDF,再配置一下相关的寄存器就可以了
回复

使用道具 举报

板凳
ID:692599 发表于 2021-1-3 19:39 | 只看该作者
单片机IO口设置成强推挽输出就可以了
回复

使用道具 举报

地板
ID:377210 发表于 2021-1-3 19:49 | 只看该作者
I/O设置成强推挽输出和动态扫描显示
回复

使用道具 举报

5#
ID:390416 发表于 2021-1-3 19:55 | 只看该作者
在这种仿真软件里面 什么都是可以的。真正到了实物,你就慢慢折腾吧。反正不按规则做,问题一大把
回复

使用道具 举报

6#
ID:96682 发表于 2021-1-3 20:04 来自手机 | 只看该作者
这得看程序及所使用的硬件能否满足耍
回复

使用道具 举报

7#
ID:96682 发表于 2021-1-3 20:13 来自手机 | 只看该作者
要求,如用的单片机驱动能力、数码管要尽可能选择高亮的
回复

使用道具 举报

8#
ID:343102 发表于 2021-1-3 20:47 | 只看该作者
我用亲身经历告诉你,没有限流排阻很不安全。
我组装了一个定时开关,采用0.22uF电容降压+3.3v稳压管为单片机供电。这种电源的电流不会很大,因为电容兼具限流作用,所以在将单片机I/O口设为强推挽输出后直接驱动数码管。制作好以后能稳定点亮数码管。用了一段时间后,因为抗干扰能力差,所以在470uF滤波电容的基础上又并联一个0.47F的法拉电容,抗电压波段能力强了,但是单片机很快就挂了。分析原因估计是法拉电容增大了放电电流,导致单片机烧毁。
回复

使用道具 举报

9#
ID:872264 发表于 2021-1-3 22:00 | 只看该作者
zhangxiangliang 发表于 2021-1-3 19:39
单片机IO口设置成强推挽输出就可以了

at89c51也可以设置成强推挽输出吗?如何设置求大佬解答
回复

使用道具 举报

10#
ID:872264 发表于 2021-1-3 22:00 | 只看该作者
MOVEORDIE 发表于 2021-1-3 19:49
I/O设置成强推挽输出和动态扫描显示

at89c51也可以设置强推挽输出吗?具体如何设置呢求大佬解答
回复

使用道具 举报

11#
ID:872264 发表于 2021-1-3 22:01 | 只看该作者
风158 发表于 2021-1-3 20:47
我用亲身经历告诉你,没有限流排阻很不安全。
我组装了一个定时开关,采用0.22uF电容降压+3.3v稳压管为单 ...

实践大佬牛啊
回复

使用道具 举报

12#
ID:870739 发表于 2021-1-3 23:15 | 只看该作者
这个真是仿真软件,仿真软件和实物还是有差距的,就比如这些一定要有限流电阻,最好在仿真图上就画上,不然做出来实物出问题,这个错误很难找出来的,浪费很大的时间。
回复

使用道具 举报

13#
ID:824490 发表于 2021-1-4 09:03 | 只看该作者
真按这个仿真图去做,你就杯具了:
没有复位电路、没有晶振源、输出没限流,电源没滤波
没有复位电路、没有晶振,芯片不能工作
输出没限流,LED亮度不均、IO易烧。
电源没滤波,稳定性有问题。
回复

使用道具 举报

14#
ID:781556 发表于 2021-1-4 09:15 | 只看该作者
首先。普通仿真衹是反應電路是否工作,並不一定可以驗證是否可以穩定的工作。這是兩碼事。
2.合格的電路設計應該兼顧各種可預見與不可預見的工況中,可以提供適宜的應對,以確保系統的穩定運行,
這裏的應對措施就包括排阻與驅動等電路。
誠如一些mcu可以在2.7V-5.5V工作,是否就不需要LDO.顯然是不專業,不嚴謹的
回复

使用道具 举报

15#
ID:872955 发表于 2021-1-4 10:23 | 只看该作者
实际电路需要加电阻,否则会引起过流 烧坏单片机 或者显示屏
回复

使用道具 举报

16#
ID:666063 发表于 2021-1-4 11:03 | 只看该作者
排阻这是为了更加稳定
回复

使用道具 举报

17#
ID:235200 发表于 2021-1-4 13:43 | 只看该作者
因为接的是共阴数码管,当P0口输出为低电平时才会使数码管亮,对于其它未点亮的数码管,虽P0口未输出为高电平,但仍然不能使数码管中的二极管产生电流而发光,所以也不会亮,致使程序运行时现象正常
回复

使用道具 举报

18#
ID:517951 发表于 2021-1-4 14:47 | 只看该作者
数码管还是需要电阻来做限流的, 发光二极管是非线性元件, 电源电压增加一点, 电流就增加很多, 轻则影响寿命, 发光管变色,重则烧器件.
回复

使用道具 举报

19#
ID:824490 发表于 2021-1-4 14:52 | 只看该作者
csmyldl 发表于 2021-1-4 13:43
因为接的是共阴数码管,当P0口输出为低电平时才会使数码管亮,对于其它未点亮的数码管,虽P0口未输出为高电 ...

当显示88881111时,没有限流电阻时,你会发现,8比1暗了好多。
回复

使用道具 举报

20#
ID:870595 发表于 2021-1-4 16:31 | 只看该作者
仿真软件限制比较小,实际中是必须加的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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