电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 5408|回复: 16

stc15f104w c语言编程问题

[复制链接]
发表于 2020-7-15 20:44:26 | 显示全部楼层 |阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
本帖最后由 爱电器维修 于 2020-7-15 20:51 编辑

各位朋友我是新学单片机的,现在有一个果汁机单片机坏了。是PIC16F54的单片机。现在我想用51单片机代替它。因为PIC的编程不会。
所以想用STC15F104W这款单片机。
   编了个程序试了不能运行。请各位朋友帮忙看看哪里有问题,帮忙解决这个问题?谢谢了!!!
果汁机有自动和手动功能,还有调速功能但这个功能和单片机没关系。它其实就是自动功能时的一个定时器功能分35S,60S,120S。
#include<stc15.h>
#define unchar unsigned char
sbit ys1=P3^0;//定义P3.0为运行定时1
sbit ys2=P3^1;//定义P3.1为运行定时2
sbit kz=P3^2;//定义P3.2为运行控制口
unchar dshm,dsm,yshm1=0,ysm1=35,yshm2=0,ysm2=60,yshm3=0,ysm3=120;
void delay (void)
{unchar i,j;
for(i=0;i<200;i++)
  {for(j=0;j<20;j++)
  {;}}
}
/******************************************************************************************/
void initial(void)
{
TMOD=0x11;
CLK_DIV=0x00;
TH0=-(10000/256);
TL0=-(10000%256);
ET0=1;TR0=1;
EA=1;
}
/*****************************************************************************************/
void time0(void) interrupt 1
{                                                                         
TH0=-(10000/256);
TL0=-(10000%256);
dshm++;
if(dshm>99){dsm++;dshm=0;}
if(dsm>120){dsm=0;dshm=0;}
if((yshm1>0)||(ysm1>0)||(yshm2>0)||(ysm2>0)||(yshm3>0)||(ysm3>0)) //确认运行时间
{                                                          
  if(ys1==1&&ys2==0&&dshm==yshm1&&dsm==ysm1)
   {kz=0;TR0=0;}
    if(ys1==0&&ys2==0&&dshm==yshm2&&dsm==ysm2)
         {TR0=0;kz=0;}
          if(ys1==0&&ys2==1&&dshm==yshm3&&dsm==ysm3)
           {TR0=0;kz=0;}
  }
}                   
/***********************************************************************/
void main(void)
{
  while(1)
  {       
   kz=0;         
   P3=0x00;
   ys1=P3^0;
   delay();
   ys2=P3^1;
   delay();
  }
}
发表于 2020-7-15 21:21:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2020-7-15 21:58:18 | 显示全部楼层
你这个 void initial(void) 应该要放到 main()中运行进行初始化吧?
发表于 2020-7-15 22:17:32 来自手机 | 显示全部楼层
你已定义了引脚    并且main里面p3=0x00  那你ys1 2现在状态都是0
发表于 2020-7-15 22:21:17 来自手机 | 显示全部楼层
main里面也应该是ys1=1或者 0  你需要好好学习基本语法  
 楼主| 发表于 2020-7-16 20:00:45 | 显示全部楼层
lm959680 发表于 2020-7-15 22:17
你已定义了引脚    并且main里面p3=0x00  那你ys1 2现在状态都是0

机器上有个开关,三挡。用它来控制ys1和ys2的电平高低
 楼主| 发表于 2020-7-16 20:03:18 | 显示全部楼层
骑着老虎的猪 发表于 2020-7-15 21:21
可以模拟的啊,你没模拟运行吗,联调,与proteus。

我没有proteus,学这个软件好像也得废好长时间吧
 楼主| 发表于 2020-7-16 20:06:43 | 显示全部楼层
lm959680 发表于 2020-7-15 22:21
main里面也应该是ys1=1或者 0  你需要好好学习基本语法

机器上有个开关,三挡的。用它来控制ys1和ys2的电平高低。
 楼主| 发表于 2020-7-16 20:11:54 | 显示全部楼层
lazyborns 发表于 2020-7-15 21:58
你这个 void initial(void) 应该要放到 main()中运行进行初始化吧?

是的,谢谢。
 楼主| 发表于 2020-7-16 21:31:40 | 显示全部楼层
本帖最后由 爱电器维修 于 2020-7-16 21:39 编辑
lm959680 发表于 2020-7-15 22:21
main里面也应该是ys1=1或者 0  你需要好好学习基本语法


我知道了那我把MAIN改下你看看。
void main(void)
{
  while(1)
  {
   initial();
   kz=0;
   delay();
   kz=1;//开机运行         
   ys1=P3^0;//扫描P3.0口状态
   delay();
   ys2=P3^1;//扫描P3.1口状态
   delay();
  }
}
这样行吗?
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2024-7-1 06:51 , Processed in 0.071602 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

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