微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 动态扫描~利用中断,定时器~

动态扫描~利用中断,定时器~

时间:10-02 整理:3721RD 点击:
刚学单片机没多久~学校学的是飞思卡尔~~最近自学了下51~~利用keil C 和proteus仿真~~~
参照各种参考书和书上的例子~~然后组合了一个动态扫描 12345和HELLO的程序~~不用中断和定时器的已经没啥问题了~~
昨晚临睡前想试一下综合一下顺便熟悉一下教材上的和教程上的各种东西~~于是在原有程序上删删改改组合成一下程序。很想知道中断和定时器是怎么应用的!额额~~
经仿真发现只会在8和9之间不断跳变。
额额,改了好多次。貌似也不怎么成功~~最后还是把它稍微恢复一下~~希望能得到大家的知道~~先行谢过QQQ~~~!

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit P1_7=P1^7;
void interrupt0() interrupt 0 using 2                         //中断
{
   uint flag=1;
}
void delay(uint x)                                           //延时函数
{
do{x--;}while(x>1);
}
void main()                                                                                          //主函数
{
uchar code num1[5]={0x06,0x5b,0x4f,0x66,0x6d};
uchar code num2[5]={0x76,0x79,0x06,0x06,0x3f};
uchar i;
uint flag=0;
P1_7=1;
TCON=0x01;
TMOD=0X02;
TL0=0xff;
TH0=0x06;
TR0=1;

EA=1;
IT0=1;
EX0=1;
do        {
if(flag==0){
P2=0x01;
for(i=0;i<5;i++)
  {
   P0=num1[i];
   delay(1500)        ;
   P2<<=1;
  }                        }
  
if(flag==1){
P2=0x01;
for(i=0;i<5;i++)
  {  
   P0=num2[i];
   delay(1500)        ;
   P2<<=1;
  }                    }
P1_7=~P1_7;
}while(!TF0);                                 

}                                  


c语言还不怎么熟悉

延时太长了

我是初学者,看看

把你的延时用定时器中断代替,在定时器中断里面送显数据

#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar flag=0;
sbit P1_7=P1^7;
uchar temp=0x01;
uchar i;
uchar count=0;
void interrupt0() interrupt 1                 //中断函数1           50ms                 
{
  TR0=0 ;
TL0=(65536-50000)/256;
TH0=(65536-50000)%256;
count++;
if(count==40)                                                        //一秒左右变一次
{
count=0;
flag=~flag;
}  
TR0=1;
  }
void interrupt1() interrupt 3                                   //中断函数2     2ms          动态扫描
{
TR1=0;                                                                                                 //先关
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
i++;
if(i==5)i=0;
temp=_crol_(temp,1);                                                                                  //左移
if(temp==0x20)temp=0x01;                                                                         //移到0010 0000时,又循环回来
TR1=1;                                                                                                  //开回来
}

void main()                                                                                          //主函数
{
uchar code num1[5]={0x06,0x5b,0x4f,0x66,0x6d};
uchar code num2[5]={0x76,0x79,0x06,0x06,0x3f};
TMOD=0X11;
TL0=(65536-50000)/256;
TH0=(65536-50000)%256;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;                                                                                //初始划计时器12
TR0=1;
TR1=1;
EA=1;
ET0=1;
ET1=1;
PT0=1;                                                                                                                                        //开各种中断
do        {
if(flag==0){
   P0=0x00;
   P0=num1;
   P3=temp;
                }
if(flag!=0){
   P0=0x00;  
   P0=num2;
   P3=temp;
  }       
}while(1);                                 

}                               

改的差不多了~~。额额,好不容易找到牛人的帮助~~才传上来拉~~ 分享一下

嗯嗯~~~谢谢斑竹指点~已改上传。继续努力

学习了,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top