tangjiaqq 发表于 2014-5-28 20:50:48

这是我写的 程序 有疑问 自己弄了很久没有好

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar shudi[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
uchar lamu[]={0x18,0x24,0x42,0x81,0x81,0x42,0x24,0x18};
uchar liud[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uint i,q;
sbitk1=P3^2;
sbitk2=P3^3;
sbitL=P1^0;
void delay(int a)
{
        int b;
                for(a;a>0;a--)
                        for(b=225;b>0;b--);
}
void lamu1()//拉幕
{        int j;
        for(j=0;j<8;j++)
        {
                P1=lamu;
                delay(40);
        }
}

void shudi1()//水滴
{
        int i;
        for(i=0;i<=8;i++)
        {        P1=shudi;
                delay(40);
        }
       
}
void liudq()
{
        int k;
        for(k=0;k<8;k++)
        {
                P1=liud;
                delay(30);
        }
}

void chushihua()
{
        TMOD=0x11;
        EA=1;
        EX0=1;EX1=1;
        IT0=1;IT1=1;
        ET0=1;ET1=1;
        TR0=1;TR1=1;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
}
void main()
{
        chushihua();
        while(1)
        {               
                i=0;
                for(;i<200;)
                {
                shudi1();
                }
                for(;i<400;)
                {
               lamu1();
                }
                for(;i<600;)
                {
                liudq();       
                }
               
               
        }       
}
void zd() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        i++;
}
void zd1() interrupt 3
{
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        q++;
}   



我想添加一个功能   使用外部中断    (按键按下时K1执行 1hz   按键按下K2执行10hz)      1hz和10hz    使用定时产生   求指导    我自己没弄起

cumtgao 发表于 2014-5-28 21:10:46

一开始代码这么大一串,估计没几个人有耐心看完吧@

cumtgao 发表于 2014-5-28 21:12:34

尤其看到 拉幕、初始化、中断的拼音,哈哈。

cumtgao 发表于 2014-5-28 21:13:35

楼主给解释解释,什么TM的liudq是什么意思?

qlb1234 发表于 2014-5-28 21:38:02

shudi
lamu
liud
chushihua
哈哈。

waterghost 发表于 2014-5-28 21:53:34

按照你写的程序好像也可以出现需要频率200400 600间隔都是200.

kcfoo1 发表于 2014-5-29 10:51:37

加个按键标识位,k1时执行i k2时执行q,

kcfoo1 发表于 2014-5-29 10:53:17

比如:if(k1) {i=0;
               for(;i<200;)
               {
               shudi1();
               }
               for(;i<400;)
               {
                  lamu1();
               }
               for(;i<600;)
               {
               liudq();      
                }
      }
   if(k2){q=0;
               for(;q<200;)
               {
               shudi1();
               }
               for(;q<400;)
               {
                  lamu1();
               }
               for(;q<600;)
               {
               liudq();      
                }}

tangjiaqq 发表于 2014-5-29 12:36:12

kcfoo1 发表于 2014-5-29 10:53
比如:if(k1) {i=0;
               for(;i

谢谢非常感谢

tangjiaqq 发表于 2014-5-29 12:37:37

waterghost 发表于 2014-5-28 21:53
按照你写的程序好像也可以出现需要频率200400 600间隔都是200.

是的   200次 *50=10s    我想使用外部中断(按键)来触发1hz 或者10hz的方波

jssd 发表于 2014-5-29 13:22:43

不知道为什么要使用那么多中断来计时,个人觉得一个就够,所有用的计时的都用一个标志位,时间到就标志,用了就清。反正你这个也不用非常实时吧。

jssd 发表于 2014-5-29 13:24:41

看这个,希望能帮到你
感谢lcdmk送的LCD12864。顺手用AT89s52做了个小游戏(原理图+程序)
http://www.amobbs.com/thread-5422394-1-1.html

tangjiaqq 发表于 2014-5-29 21:29:19

jssd 发表于 2014-5-29 13:24
看这个,希望能帮到你
感谢lcdmk送的LCD12864。顺手用AT89s52做了个小游戏(原理图+程序)
http://www.amob ...

十分感谢   谢谢
页: [1]
查看完整版本: 这是我写的 程序 有疑问 自己弄了很久没有好