找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2264|回复: 10
收起左侧

单片机仿真按键无效

[复制链接]
ID:837970 发表于 2020-11-9 16:48 来自手机 | 显示全部楼层 |阅读模式
程序见2楼
回复

使用道具 举报

ID:837970 发表于 2020-11-9 16:50 来自手机 | 显示全部楼层
#include <REGX51.H>
#define uint unsigned int                                        #define uchar unsigned char       
unsigned char c;
char a=10;
sbit key_add=P1^0;
sbit out=P1^1;
void delay(unsigned int t)
{    while(t--);}
void main()
{TMOD=0X01;
TH0=(65536-1000)/256;TL0=(65536-1000)%256;
TR0=1;ET0=1;EA=1;while(1)
{ if(key_add==0)
{ delay(1000);
if(key_add==0)
{ a++;if(a>20);a=10; } while(!key_add);                                                                                                           }}}
void Timer()interrupt 1{
TH0=(65536-1000)/256; TL0=(65536-1000)%256;
c++;
if(c==20)c=0; if(c<a) out=1;
else out=0;}
20201109164044(1).png
回复

使用道具 举报

ID:654028 发表于 2020-11-10 09:32 | 显示全部楼层
你这电路有问题啊,按键按不按你都不经过按键的,直接接地了
回复

使用道具 举报

ID:837970 发表于 2020-11-10 11:12 来自手机 | 显示全部楼层
心有浮生 发表于 2020-11-10 09:32
你这电路有问题啊,按键按不按你都不经过按键的,直接接地了

那麻烦请问应该怎么接
回复

使用道具 举报

ID:213173 发表于 2020-11-10 13:04 | 显示全部楼层
HuTi123 发表于 2020-11-9 16:50
#include
#define uint unsigned int                                        #define uchar unsigned char       
unsigned char c;

程序和仿真图都没有明显问题,改+/-键试试
无标题.jpg

  1. #include <REG51.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char        
  4. unsigned char c;
  5. char a=10;
  6. sbit key_add=P1^0;
  7. sbit key_minus=P1^2;
  8. sbit out=P1^1;
  9. void delay(unsigned int t)
  10. {
  11.         while(t--);
  12. }
  13. void main()
  14. {
  15.         TMOD=0X01;
  16.         TH0=(65536-1000)/256;
  17.         TL0=(65536-1000)%256;
  18.         TR0=1;
  19.         ET0=1;
  20.         EA=1;
  21.         while(1)
  22.         {
  23.                 if(key_add==0)
  24.                 {
  25.                         delay(1000);
  26.                         if(key_add==0)
  27.                         {
  28.                                 if(a<20)
  29.                                         a++;
  30.                                 while(!key_add);
  31.                         }
  32.                 }
  33.                 if(key_minus==0)
  34.                 {
  35.                         delay(1000);
  36.                         if(key_minus==0)
  37.                         {
  38.                                 if(a>10)
  39.                                         a--;
  40.                                 while(!key_minus);
  41.                         }
  42.                 }
  43.         }
  44. }
  45. void Timer()interrupt 1
  46. {
  47.         TH0=(65536-1000)/256;
  48.         TL0=(65536-1000)%256;
  49.         c++;
  50.         if(c==20)
  51.                 c=0;
  52.         if(c<a)
  53.                 out=1;
  54.         else out=0;
  55. }
复制代码



回复

使用道具 举报

ID:654028 发表于 2020-11-10 13:22 | 显示全部楼层
HuTi123 发表于 2020-11-10 11:12
那麻烦请问应该怎么接

把按键移到地上面,这样不按按键的时候IO口就是高电平,按下按键就是低电平
@`Z@P)[[@B{$G]NSX[N~%RM.png
回复

使用道具 举报

ID:837970 发表于 2020-11-10 20:47 来自手机 | 显示全部楼层
心有浮生 发表于 2020-11-10 13:22
把按键移到地上面,这样不按按键的时候IO口就是高电平,按下按键就是低电平

嗯,已测试,谢谢
回复

使用道具 举报

ID:837970 发表于 2020-11-10 20:48 来自手机 | 显示全部楼层
wulin 发表于 2020-11-10 13:04
程序和仿真图都没有明显问题,改+/-键试试

实测有效,谢谢您的建议
回复

使用道具 举报

ID:143767 发表于 2020-11-12 17:26 | 显示全部楼层
指点的明显有错误,把按钮接到复位电阻的下端,开机单片机是无法复位的
回复

使用道具 举报

ID:230118 发表于 2020-11-13 15:58 | 显示全部楼层
这种硬件接法要求按键输入口必须有内部上拉电路,查手册P1.0是否有,如果有将该IO初始化为上拉输入
回复

使用道具 举报

ID:837970 发表于 2020-11-23 10:49 | 显示全部楼层
bro0310 发表于 2020-11-13 15:58
这种硬件接法要求按键输入口必须有内部上拉电路,查手册P1.0是否有,如果有将该IO初始化为上拉输入

谢谢您的建议,原以为问题解决了,还是从你这里了解了更多
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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