倒计数计数器程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include #include

#define LED_code_port P0 // 段码数据口

#define LED_segmnet_port P2 // 位码数据口

sbit KEYL3=P1^5;

sbit KEYH1=P1^0;

sbit KEYH2=P1^1;

sbit KEYH3=P1^2;

sbit KEY1=P3^3;//四个按键数据口

unsigned int flag;

unsigned char time_data[3]={00,10,0};

unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,

0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,

0xC6,0xA1,0x86,0x8E

};//段码数组

unsigned char n=0; // n为节拍常数变量

unsigned char code music_tab[] ={ 0x18, 0x30, 0x1C , 0x10, //格式为频率常数, 节拍常数, 频率常数, 节拍常数,

0x20, 0x40, 0x1C , 0x10,

0x18, 0x10, 0x20 , 0x10,

0x1C, 0x10, 0x18 , 0x40,

0x1C, 0x20, 0x20 , 0x20,

0x1C, 0x20, 0x18 , 0x20,

0x20, 0x80, 0xFF , 0x20,

0x30, 0x1C, 0x10 , 0x18,

0x20, 0x15, 0x20 , 0x1C,

0x20, 0x20, 0x20 , 0x26,

0x40, 0x20, 0x20 , 0x2B,

0x20, 0x26, 0x20 , 0x20,

0x20, 0x30, 0x80 , 0xFF,

0x20, 0x20, 0x1C , 0x10,

0x18, 0x10, 0x20 , 0x20,

0x26, 0x20, 0x2B , 0x20,

0x30, 0x20, 0x2B , 0x40,

0x20, 0x20, 0x1C , 0x10,

0x18, 0x10, 0x20 , 0x20,

0x26, 0x20, 0x2B , 0x20,

0x30, 0x20, 0x2B , 0x40,

0x20, 0x30, 0x1C , 0x10,

0x18, 0x20, 0x15 , 0x20,

0x1C, 0x20, 0x20 , 0x20,

0x26, 0x40, 0x20 , 0x20,

0x2B, 0x20, 0x26 , 0x20,

0x20, 0x20, 0x30 , 0x80,

0x20, 0x30, 0x1C , 0x10,

0x20, 0x10, 0x1C , 0x10,

0x20, 0x20, 0x26 , 0x20,

0x2B, 0x20, 0x30 , 0x20,

0x2B, 0x40, 0x20 , 0x15,

0x1F, 0x05, 0x20 , 0x10,

0x1C, 0x10, 0x20 , 0x20,

0x26, 0x20, 0x2B , 0x20,

0x30, 0x20, 0x2B , 0x40,

0x20, 0x30, 0x1C , 0x10,

0x18, 0x20, 0x15 , 0x20,

0x1C, 0x20, 0x20 , 0x20,

0x26, 0x40, 0x20 , 0x20,

0x2B, 0x20, 0x26 , 0x20,

0x20, 0x20, 0x30 , 0x30,

0x20, 0x30, 0x1C , 0x10,

0x18, 0x40, 0x1C , 0x20,

0x20, 0x20, 0x26 , 0x40,

0x13, 0x60, 0x18 , 0x20,

0x15, 0x40, 0x13 , 0x40,

0x18, 0x80, 0x00

};

sbit S=P2^2;

void delay (unsigned char m) // 控制频率延时

{

unsigned char i=3*m;

while(--i);

}

void delayms(unsigned char a) // 毫秒延时子程序

{

while(--a); // 采用while(--a) 不要采用while(a--);

}

void KILL() //播放音乐函数

{

unsigned char p,m; // m为频率常数变量unsigned char i=0;

TMOD =0x10;

TH1=0xd8;TL1=0xef;

ET1=1;EA=1;ES=1;

play:

while(1)

{

a:

p=music_tab[i];

if(p==0x00)

{i=0, delayms(1000);

goto play;} // 如果碰到结束符,延时1秒,回到开始再来一遍

else if(p==0xff)

{

i=i+1;delayms(100),TR1=0;

goto a;

} // 若碰到休止符,延时100ms,继续取下一音符

else

{

m=music_tab[i++], n=music_tab[i++];

} // 取频率常数和节拍常数

TR1=1; // 开定时器1

while(n!=0) S=~S,delay(m); //等待节拍完成, 通过P1口输出音频(可多声道哦!) TR1=0; //关定时器1

}

}

void delay_ms(unsigned int x) // 延时毫秒级

{

unsigned int a=0,b=0,c=0;

for(a=x;a>0;a--)

for(b=5;b>0;b--)

for(c=128;c>0;c--);

}

void LED_display(unsigned char seg_code,unsigned char shuju)

{

if(seg_code<1||seg_code>4) seg_code=1;

if(shuju>15) shuju=15;

LED_segmnet_port=(LED_segmnet_port|0xf0)&_crol_(0xef,seg_code-1); // 送入位码

LED_code_port=table[shuju]; // 送入段码

delay_ms(2); // 保持显示2毫秒

LED_segmnet_port=LED_segmnet_port|0xf0; // 关掉所有数码管}

void display_time()

{

LED_display(1,time_data[0]/10);

LED_display(2,time_data[0]%10);

LED_display(3,time_data[1]/10);

LED_display(4,time_data[1]%10);

}

void time_initial()

{

TMOD=0x01; //定时器,方式1

TH0=0x4c; //写入初值高8位

相关文档
最新文档