查看: 2079|回复: 3
上一主题 下一主题 跳转到指定楼层

【悬赏失效】求一道单片机C语言汇编的程序!(已被解决)

2648

主题

2646

存在感

896

活跃日
帅哥离线 错的是我,不是别人
 8 

SOS团五星级★★★★★

发帖: 9610
SOS币: 88844
社团: ☆春铃亲卫队☆
社团: 聖条学園文芸部
社团: 黑曜の风纪委员会
社团: SOSG推倒协会
社团: 乃木坂春香の联盟
注册: 2008-07-26
访问: 2021-11-06

楼主
发表于 2012/06/06 | 编辑

使用定时器/计数器T0的外部计数方式统计计按键次数,并将结果送一并口的8位LED显示,程序实现每按一次按键,按键次数加1,LED就多点亮一个(例如按2次按钮就点亮2只LED,按3次就亮3只LED),按第9次,LED只点亮第一个。
要求:
(1)在keil IDE(μvision4)中完成应用程序设计、并编译;
(2)在PROTEUS 7.8下的ISIS Professional中完成电路设计、调试与仿真通过。
(3)使用AT89C51单片机。
最好能附上电路图。各语句的解释。谢谢

虽然我在百度了一下这个题目,但是按照图片和上面的编程都好像不太行
图片:
图片需登录后查看

百度上的编程
#include<reg51.h>
sbit S1=P3^4;
unsigned char i;
void delay(void)
{
unsigned int n;
for(n=0;n<10000;n++)       ;
}
//主程序
void main(void)
{
P0=0xff;
TMOD = 0X06;
TH0 = 256-1;
TL0 = 256-1;
ET0 = 1; //允许计数中断
EA = 1; //开总中断
TR0 = 1; //启动计数方式工作
while(1)
{
if(S1==0)     //如果S1键按下
{
delay();  //延时一段时间
if(S1==0) //如果再次检测到S1键按下
i++;    //i自增1
if(i==9)  //如果i=9,重新将其置为1
  i=1;    
}
switch(i)   //使用多分支选择语句
{
case 1: P0=0xfe;  //第一个LED亮
break;
case 2: P0=0xfd;  //第二个LED亮
break;
case 3:P0=0xfb;   //第三个LED亮
break;
case 4:P0=0xf7;   //第四个LED亮
break;
case 5:P0=0xef;   //第五个LED亮
break;
case 6:P0=0xdf;   //第六个LED亮
break;
case 7:P0=0xbf;   //第七个LED亮
break;
case 8:P0=0x7f;   //第八个LED亮
break;
default:   //缺省值,关闭所有LED
  P0=0xff;
}    
}}
求大神救救伊织了233


[ 此贴被速水伊织在2012-06-08 20:29重新编辑 ]

505

主题

434

存在感

411

活跃日
喵~离线 以后还有机会
 7 

SOS团四星级★★★★

1楼
发表于 2012/06/07 | 编辑
应该是芯片不同导致的控制字地址不同吧

TMOD = 0X06;
TH0 = 256-1;
TL0 = 256-1;
ET0 = 1; //允许计数中断
EA = 1; //开总中断
TR0 = 1; //启动计数方式工作

还有就是LED是不是接在P0上的
这段关于计数方式的控制字应该需要改

2648

主题

2646

存在感

896

活跃日
帅哥离线 错的是我,不是别人
 8 

SOS团五星级★★★★★

2楼
发表于 2012/06/07 | 编辑
引用第1楼XDH42492012-06-07 13:02发表的“”:
应该是芯片不同导致的控制字地址不同吧

TMOD = 0X06;
TH0 = 256-1;
TL0 = 256-1;
.......


图片需登录后查看

换这个图了,现在要咋改那里啊,伊织这方面纯傻瓜啊

2648

主题

2646

存在感

896

活跃日
帅哥离线 错的是我,不是别人
 8 

SOS团五星级★★★★★

3楼
发表于 2012/06/08 | 编辑
题目别宿舍的高玩解决了233,悬赏失效

关于我们|无图版|SOSG WIKI

Copyright © 2006-2024 SosG.Net
Total 0.013466(s) query 7, Gzip enabled,  沪ICP备07006640号-3