找回密码
 立即注册

QQ登录

只需一步,快速开始

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

想请教一下,想在软件上实现对51单片机的自检功能,像对八位数码管,按键、LED灯等...

[复制链接]
跳转到指定楼层
楼主
ID:1102550 发表于 2023-12-5 16:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想请教一下,想在软件上实现对51单片机的自检功能,像对八位数码管,按键、LED灯等元器件检测,怎么去实现啊,第一次做这个。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:712097 发表于 2023-12-5 20:00 | 只看该作者
设计一个自程序,把单片机所有资源如定时器,串口,ADC,PWM等。搭配上按键/数码管/LED等外设显示程序执行状态。
回复

使用道具 举报

板凳
ID:1102550 发表于 2023-12-6 14:46 | 只看该作者
chxelc 发表于 2023-12-5 20:00
设计一个自程序,把单片机所有资源如定时器,串口,ADC,PWM等。搭配上按键/数码管/LED等外设显示程序执行 ...

能否具体一点点
回复

使用道具 举报

地板
ID:69038 发表于 2023-12-6 15:24 | 只看该作者
这个要看你的系统有多少外设要自检。
比如你的系统有8个7段数码管,有个按键,还有个LED,那么:
开机LED闪烁,直到按键按下,按下后8个7段数码管同时显示a/b/c/d...段。然后每个数码管单独显示01234...
然后等待按键或自动结束测试,进入工作状态。。
有喇叭、蜂鸣器则让它吱一声。
有LCD则让它全屏点亮、全屏灭,再来个逐行、逐列显示。
有对外通讯口比如串口,则让它回弹一下数据。



回复

使用道具 举报

5#
ID:1102550 发表于 2023-12-6 17:49 | 只看该作者
zhuls 发表于 2023-12-6 15:24
这个要看你的系统有多少外设要自检。
比如你的系统有8个7段数码管,有个按键,还有个LED,那么:
开机LED ...

八位的数码管我已经对他进行了0~7的滚动初始化,可以不用在对数码管进行检测了吗?
然后我想着重去检测4个开关按键是否存在按下(低电平)的情况和蜂鸣器.下面是我定义的代码,不太对
//自检//
void keyscan()
{
        if(key1==0)//开机后检测到按键又被按下,则有问题闪红灯。
        {
                Delay(10);
   if(key1==0)//再次确认是否按下
  {
                led14=0;
                Delay(1000);
                led14=1;
                Delay(1000);
        }
}
}
回复

使用道具 举报

6#
ID:1102550 发表于 2023-12-6 18:11 | 只看该作者
zhuls 发表于 2023-12-6 15:24
这个要看你的系统有多少外设要自检。
比如你的系统有8个7段数码管,有个按键,还有个LED,那么:
开机LED ...

这是我重新写的代码,大佬能否帮我看看,只有那个蜂鸣器响3次没有实现。
//显示开机初始化等待画面//
  1. void Disp_init(void)
  2. {
  3.         uchar i;
  4.                 for(i=0;i<8;i++)
  5.                 {
  6.                         wei=1;
  7.                         P0=we[i];
  8.                         wei=0;
  9.                         P0=LEDData[i];//循环8次
  10.                         Delay(100000);  //延时
  11.                         P0=0x00;
  12.                 }
  13.                
  14. }

  15. //灯自检//
  16. void led_jiance(void)
  17. {
  18.         uchar j;
  19.                 for(j=5;j>0;j--)   //闪烁5次
  20.                 {
  21.                 led1=0;led2=0;led3=0;
  22.                 Delay(500000);
  23.                 led1=1;led2=1;led3=1;
  24.                 Delay(500000);
  25.                 }
  26.         }

  27.         //蜂鸣器自检//
  28.         void spreak_jiance(void)
  29.         {
  30.                 uchar h;
  31.                 for(h=0;h<3;h++)   //响3次
  32.                 {
  33.                 beep_st=1;   ////蜂鸣器间隔标志
  34.                 beep1_st=1;
  35.                 beep2_st=1;
  36.                 beep=1;
  37.                 beep1=1;
  38.                 beep2=1;
  39.                 Delay(500);
  40.                 beep_st=0;
  41.                 beep1_st=0;
  42.                 beep2_st=0;
  43.                 beep=0;
  44.                 beep1=0;
  45.                 beep2=0;
  46.     Delay(500);
  47.                 }
  48.         }
  49.         
  50.         //按键检测
  51.         void keyscan(void)
  52. {
  53.         if(key1==0)//开机后检测到按键被按下,则有问题闪红灯。
  54.         {
  55.                 Delay(10);
  56.    if(key1==0)   //再次确认是否按下
  57.   {
  58.                 while(1)
  59.                 {
  60.                 led14=0;
  61.                 Delay(1000);
  62.                 led14=1;
  63.                 Delay(1000);
  64.         }
  65. }
  66.         }
  67. }
复制代码
回复

使用道具 举报

7#
ID:69038 发表于 2023-12-7 09:41 | 只看该作者
欢欢1111 发表于 2023-12-6 18:11
这是我重新写的代码,大佬能否帮我看看,只有那个蜂鸣器响3次没有实现。
//显示开机初始化等待画面//

蜂鸣器是有源无源的?看你这个代码像是有源的,没有图,不明白你为什么要这么控制?
有源的只要给电就叫,断电就停。
回复

使用道具 举报

8#
ID:1102550 发表于 2023-12-7 10:57 | 只看该作者
zhuls 发表于 2023-12-7 09:41
蜂鸣器是有源无源的?看你这个代码像是有源的,没有图,不明白你为什么要这么控制?
有源的只要给电就叫 ...

是有源,代码是想表示蜂鸣器响3次,带好像我这样不行
回复

使用道具 举报

9#
ID:1102550 发表于 2023-12-7 11:01 | 只看该作者
zhuls 发表于 2023-12-7 09:41
蜂鸣器是有源无源的?看你这个代码像是有源的,没有图,不明白你为什么要这么控制?
有源的只要给电就叫 ...

谢谢   解决啦
回复

使用道具 举报

10#
ID:69038 发表于 2023-12-7 11:06 | 只看该作者
欢欢1111 发表于 2023-12-7 10:57
是有源,代码是想表示蜂鸣器响3次,带好像我这样不行

有源BEEP:

for(i=0;i<3;i++) {BEEP控制IO置高;延时;BEEP控制IO置低;延时;}  //这就能断续响3声了
回复

使用道具 举报

11#
ID:517951 发表于 2023-12-7 11:18 | 只看该作者
数码管可以软件设置全部段码亮1s, LED灯闪烁,  按键可以编号, 按中那个按键, 段码管显示对应的数值.
回复

使用道具 举报

12#
ID:1037692 发表于 2023-12-7 12:01 | 只看该作者
首先,你需要了解51单片机的基本原理和编程语言,比如C语言或者汇编语言。然后,你可以按照以下步骤实现自检功能:1. 编写程序:首先,你需要编写一个程序,在程序中对八位数码管、按键、LED灯等元器件进行检测。你可以使用相应的库函数或者直接操作寄存器来控制这些元器件。2. 设计测试方法:在程序中,你需要设计一些测试方法,用来检测这些元器件是否正常工作。比如,你可以编写一个函数来逐个点亮LED灯,或者逐个检测按键是否按下。3. 执行测试:将程序下载到51单片机中,然后执行测试。观察测试结果,检查元器件是否正常工作。4. 调试程序:如果测试结果不符合预期,你需要对程序进行调试,找出问题所在并进行修正。总的来说,实现自检功能需要你对51单片机有一定的了解,并且具备一定的编程能力。如果你是第一次做这个,建议你先学习一些关于51单片机的基础知识和编程技巧,然后再尝试实现自检功能。祝你好运!
回复

使用道具 举报

13#
ID:996773 发表于 2023-12-7 14:15 | 只看该作者
楼主还是先规规矩矩点个数码管查询按键入门吧,自检程序是高手出成品再考虑的事情

这行当没有弯道超车。
回复

使用道具 举报

14#
ID:1102550 发表于 2023-12-7 15:38 | 只看该作者
hi等你 发表于 2023-12-7 14:15
楼主还是先规规矩矩点个数码管查询按键入门吧,自检程序是高手出成品再考虑的事情

这行当没有弯道超车。

啊。。我就是想先在仿真里做一个开机带有自检功能的系统
回复

使用道具 举报

15#
ID:996773 发表于 2023-12-7 15:56 | 只看该作者
欢欢1111 发表于 2023-12-7 15:38
啊。。我就是想先在仿真里做一个开机带有自检功能的系统

阅读能力这么差?如何去写程序?我说的和12楼一样的意思,写自检程序需要的技术和代码量比你现在

点亮数码管和按键检测入门的程序高很多,别好高骛远,先写一些点亮数码管的小程序,先别考虑自检了
回复

使用道具 举报

16#
ID:69038 发表于 2023-12-7 17:27 | 只看该作者
欢欢1111 发表于 2023-12-7 15:38
啊。。我就是想先在仿真里做一个开机带有自检功能的系统

这个完全可以的。
有多大的能力,就做多大的事。
自检功能说白了就是一个软件硬件相互配合做一些简单的声、光、电、机的动作。
依你的系统而定,但不能把自检功能写得比系统本身还复杂,那就本末倒置了。
有可能你现在做的很简陋,但到少你做到了!说不定以后某天再返回来看这些代码时,你又有新的想法,那就按新的想法去完善它。
学无止境,全靠抄袭--学习本就是一个“抄袭”的过程。没有人天生就是高手的。加油~~
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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