mcu

[复制链接]
1604|18
 楼主| samlianxing 发表于 2015-8-23 16:10 | 显示全部楼层 |阅读模式
按键按下数码管保持亮的c語言,有人懂吗?
tyw 发表于 2015-8-23 16:14 | 显示全部楼层
 楼主| samlianxing 发表于 2015-8-23 16:35 | 显示全部楼层
还是一样,
按键按下数码管不亮
tyw 发表于 2015-8-23 16:46 | 显示全部楼层
samlianxing 发表于 2015-8-23 16:35
还是一样,
按键按下数码管不亮

把你的硬件电路图贴上来
gx_huang 发表于 2015-8-23 16:57 | 显示全部楼层
来自星星的你!
通宵敲代码 发表于 2015-8-23 17:06 | 显示全部楼层
这也太简单了吗
 楼主| samlianxing 发表于 2015-8-23 18:10 | 显示全部楼层
懂的就简单,不懂就复雜,你懂的就给个例子
 楼主| samlianxing 发表于 2015-8-23 18:16 | 显示全部楼层
tyw 发表于 2015-8-23 16:46
把你的硬件电路图贴上来

用at89c2051,要怎改,程序如下:

#include <reg52.h>
sbit wei0=P3^0; //千位
sbit wei1=P3^1; //百位
sbit wei2=P3^2; //十位
sbit wei3=P3^4; //个位
sbit key_add=P3^3;
unsigned char code LedChar[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E };

void delay(unsigned int time);
unsigned char i=0; //动态扫描的索引
unsigned int cnt=0; //记录 T0 中断次数
void main()
{
unsigned long num=0; //记录经过的秒数
EA=1; //开总中断
TMOD=0x01; //设置 T0 为模式 1
TH0=0xB8; //为 T0 赋初值 0xFC67定时 1ms
TL0=0x00;
ET0=1; //使能 T0 中断
TR0=1; //启动 T0
while (1)
{
  if(key_add==0)
     {
      while(key_add==0);
      if(num<10000)
      num++;                         
   if(num==10000)
     num=0;
     }
   wei3=0;
   P0=LedChar[num/10%10];   
   wei3=1;
   delay(5);

   wei2=0;
   P0=LedChar[num/100%10];   
   wei2=1;
   delay(5);

   wei1=0;
   P0=LedChar[num/1000%10];
   wei1=1;
   delay(5);   

   wei0=0;
   P0=LedChar[num%10];
   wei0=1;
   delay(5);

      }
}

void delay(unsigned int time)
{
while(time--);//1us
}
/* 定时器 0 中断服务函数 */
void InterruptTimer0() interrupt 1
{
TH0 = 0xFC; //重新加载初值
TL0 = 0x67;
cnt++; //中断次数计数值加 1
}
 楼主| samlianxing 发表于 2015-8-23 18:16 | 显示全部楼层
tyw 发表于 2015-8-23 16:46
把你的硬件电路图贴上来

用at89c2051,要怎改,程序如下:

#include <reg52.h>
sbit wei0=P3^0; //千位
sbit wei1=P3^1; //百位
sbit wei2=P3^2; //十位
sbit wei3=P3^4; //个位
sbit key_add=P3^3;
unsigned char code LedChar[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E };

void delay(unsigned int time);
unsigned char i=0; //动态扫描的索引
unsigned int cnt=0; //记录 T0 中断次数
void main()
{
unsigned long num=0; //记录经过的秒数
EA=1; //开总中断
TMOD=0x01; //设置 T0 为模式 1
TH0=0xB8; //为 T0 赋初值 0xFC67定时 1ms
TL0=0x00;
ET0=1; //使能 T0 中断
TR0=1; //启动 T0
while (1)
{
  if(key_add==0)
     {
      while(key_add==0);
      if(num<10000)
      num++;                         
   if(num==10000)
     num=0;
     }
   wei3=0;
   P0=LedChar[num/10%10];   
   wei3=1;
   delay(5);

   wei2=0;
   P0=LedChar[num/100%10];   
   wei2=1;
   delay(5);

   wei1=0;
   P0=LedChar[num/1000%10];
   wei1=1;
   delay(5);   

   wei0=0;
   P0=LedChar[num%10];
   wei0=1;
   delay(5);

      }
}

void delay(unsigned int time)
{
while(time--);//1us
}
/* 定时器 0 中断服务函数 */
void InterruptTimer0() interrupt 1
{
TH0 = 0xFC; //重新加载初值
TL0 = 0x67;
cnt++; //中断次数计数值加 1
}
小群儿 发表于 2015-8-23 20:17 | 显示全部楼层
samlianxing 发表于 2015-8-23 18:16
用at89c2051,要怎改,程序如下:

#include  

你自己会不会学一下?没一点基础,说了你也不懂,看懂每句话,自然不是问题
songchenping 发表于 2015-8-23 20:52 | 显示全部楼层
这里不是幼儿园, 没人给你叫123怎么写。
zhangbtj 发表于 2015-8-23 21:11 | 显示全部楼层
很多单片机书上都应该能找到吧
皈依 发表于 2015-8-23 22:25 | 显示全部楼层
加油吧小鱼儿 发表于 2015-8-23 22:27 | 显示全部楼层
 楼主| samlianxing 发表于 2015-8-23 22:47 | 显示全部楼层
失望,只会吹水,没人懂
松哥无敌 发表于 2015-8-23 23:27 | 显示全部楼层
samlianxing 发表于 2015-8-23 22:47
失望,只会吹水,没人懂

不是么人懂,不是想搭理你。这种问题就别贴上来了,没劲
strang 发表于 2015-8-24 08:48 | 显示全部楼层
哎 提问题的人表达能力欠佳啊
wanggang4383 发表于 2015-8-24 09:08 | 显示全部楼层
中断定时不知道有什么用
wei3=0;
   P0=LedChar[num/10%10];   
   wei3=1;
   delay(5);
这几句是不是应该交换下顺序啊?
wei3=1;
P0=LedChar[num/10%10];   
delay(5);
wei3=0;



nethopper 发表于 2015-8-24 09:49 | 显示全部楼层
每个字符灭的时间太长,亮的时间太短,大大地加大扫描显示每个字符用的后一个delay(XXXX), 应该就会亮。你那个delay子程序是否是1微妙还不清楚。另外如楼上所述,中断没用上。可能应该用来改变NUM吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

24

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部