找回密码
 立即注册

QQ登录

只需一步,快速开始

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

自己写个程序发现运行不了找不到问题求指导

[复制链接]
跳转到指定楼层
楼主
ID:58720 发表于 2014-2-9 15:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
“动态数码管扫描”
用定时器,1秒一个数走到256然后清0从新走。基本这个意思。
下面是我写的程序:


#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar a,num,temp,ge,shi,bai;
uchar code duan[]={     //段数组编码    0、1、2、3、4、5、6、7、8、9、0、A、B、C、D、E、F
  0x3f,0x06,0x5b,0x4f,
  0x66,0x6d,0x7d,0x07,
  0x7f,0x6f,0x77,0x7c,
  0x39,0x5e,0x79,0x71};
//uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   //位数组编码 个、十、百、千。。。
void init();
void display(uchar);
void delay(uint);
//void timer0();
void main()
{

init();

while(1)
{
   if(a==50)
   {
    a=0;
    if(num>256);
    num=0;
    num++;   
   }
   display(num);  //输入数字(0~255)
           
}
}
void init()      //初始化程序
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
P1=0xff;
P0=0x00;
num=0;
}
void timer0() interrupt 1 //中断计时器
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
a++;
}
void display(uchar temp)
{
bai=temp/100;    //显百位数
P1=0xfe;     //百位应位左数第一个数
P0=duan[bai];
delay(2);

shi=temp%100/10;   //显十位数
P1=0xfd;
P0=duan[shi];
delay(2);
ge=temp%100%10;    //显个位数
P1=0xfb;     //个位应为左数第三个数
P0=duan[ge];
delay(2);
}
void delay(uint x) //约为1ms延时.
{
uint i,j;
for(i=x;i>0;i--)
  for(j=121;j>0;j--);

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

7#
ID:59303 发表于 2014-2-27 14:17 | 只看该作者
占坐观众
回复

使用道具 举报

6#
ID:55063 发表于 2014-2-25 21:19 | 只看该作者
其实三楼说的已经很到位了。我只想提醒一下,if语句如果不加“{}”,后面是不能加“;”的。“;”的意思是一条完整的命令。我想你也知道,但开始时会不经意出错。我建议你即使是一条语句也加上“{}”,为以后写大程序养成好习惯。
回复

使用道具 举报

5#
ID:59153 发表于 2014-2-21 01:01 | 只看该作者
单片机编程的话,可以debug那就用jtag单步调试,设置断点看挂在那里。没办法就加printf,看程序在哪里之后开始没打印。
回复

使用道具 举报

地板
ID:58720 发表于 2014-3-1 00:57 | 只看该作者
ahshmj 发表于 2014-2-10 19:57
根据你的num的定义,num的最大值只能是0xff,也就是255,不可能大于255更不可能大于256,所以......
另外 ...

谢谢您的回答!
回复

使用道具 举报

板凳
ID:7485 发表于 2014-2-10 19:57 | 只看该作者
根据你的num的定义,num的最大值只能是0xff,也就是255,不可能大于255更不可能大于256,所以......
另外,语句格式也不对,应该如下:
   if(num==255)
    num=0;
    else
    num++;   

其实,就一句  num++;  就够了,其余的语句不需要。到了255后再加1就是0.
回复

使用道具 举报

沙发
ID:58936 发表于 2014-2-9 19:24 | 只看该作者
你好,你开发板的引脚是怎么定义的?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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