×
单片机 > 单片机程序设计 > 详情

单片机多功能秒表语音播报

发布时间:2021-04-22 发布时间:
|

单片机源码如下:
#include //头文件
#include
#define uchar unsigned char
#define uint unsigned int
sbit p1=P2^7; //定义数码关位选
sbit p2=P2^6;
sbit p3=P2^5;
sbit p4=P2^4;
sbit dp=P0^7;
sbit yuyin=P1^0; //开始按键
sbit kaishi=P1^1; //开始按键
sbit jilu=P1^2; //记录按键
sbit qingling=P1^3; //清零按键
sbit fangxiang=P1^4;//方向按键
sbit shezhi=P1^5; //设置按键
sbit zsd=P3^5; //指示灯
sbit fmq=P2^2; //蜂鸣器
uchar shuju[4]; //数码管显示变量
uchar code data_7seg[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xab,0xa3}; //共阳数码管显示段码
uchar idata shuju_fen[10]; //保存记录的秒存储器
uchar idata shuju_miao[10]; //保存记录的10毫秒存储器
uchar count;count1;count2;count3,fx=0;ks=0;sz=0;ss=0;a,b;biaozhi=0;moshi=0;naozhong=0;sss=0;sjd=0;jiwei=0;jishu=0;xuhuan;chakan=0;jw=0;wz=1; //变量
char fen,miao;fen1=0,miao1=0;//设置是的变量
sbit P_DATA = P2^0; //定义数据传输端口对应语音芯片P03
uchar daima,bofang=0;
uchar ddd;

//一线,二线,三线有关
#define H 1 //定义1为高电平
#define L 0 //定义0为低电平

//////////////变量/////////////////
//bit flag = 1;
bit B_DATA; //传输数据一位
unsigned char SB_DATA = 0; //一字节公用数据缓存器
unsigned char S_DATA = 0x00;
void delay1s(void) //误差 0us
{
unsigned char a,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_();//if Keil,require use intrins.h
}
void delay500ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=23;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
}
void delay5ms(void) //误差 0us
{
unsigned char a,b;
for(b=19;b>0;b--)
for(a=130;a>0;a--);
}
void delay200us(void) //误差 0us
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=97;a>0;a--);
}
/*--------------------------------------
;模块名称:Line_1A(void)
;功 能:实现一线单字节低位在前串口通信函数
;入 参:无
;出 参:0 返回主函数
;-------------------------------------*/
void Line_1A(unsigned char dat)
{
unsigned char i;


//********************************************************

P_DATA = 0;

delay5ms(); //拉低至少5ms

B_DATA = dat&0X01;
for(i=0;i<8;i++)
{
P_DATA = 1; //拉高数据传输线,准备传输数据
if(B_DATA==0)
{ /*表示逻辑电平0*/
delay200us(); // 延时200us
P_DATA = 0;
delay200us(); // 延时600us
delay200us();
delay200us();
}
else
{/*表示逻辑电平1*/
delay200us();
delay200us();
delay200us();
P_DATA = 0;
delay200us();
}
dat = dat>>1;
B_DATA = dat&0X01;
}
P_DATA = 1; //拉高电平
}
void mp3()
{ if (yuyin==0) //置零按键按下
{ ET1=1;
TR1=1;
if(fx==0)
Line_1A(14);
else
Line_1A(13);
delay1s();
delay1s();
if(fen/10==1)
{Line_1A(10);delay500ms();

if(fen%10>=1)
{Line_1A(fen%10); delay500ms(); }
}
else
if(fen/10>1)
{Line_1A(fen/10);delay500ms();

Line_1A(10);delay500ms();

if(fen%10>=1)
{Line_1A(fen%10); delay500ms(); }

}
else
{Line_1A(fen%10);delay500ms();}

Line_1A(11);
delay500ms();

if(miao/10==1)
{Line_1A(10);delay500ms();

if(miao%10>=1)
{Line_1A(miao%10); delay500ms(); }
}
else
if(miao/10>1)
{Line_1A(miao/10);delay500ms();

Line_1A(10);delay500ms();

if(miao%10>=1)
{Line_1A(miao%10); delay500ms(); }

}
else
{Line_1A(miao%10);delay500ms();}

Line_1A(12);
delay500ms();

}while(yuyin==0);
ET1=0;
TR1=0;

}
void qudou(void) //去抖延迟
{ int i;
for(i=0;i<2400;i++);
}
void Delay1ms(unsigned int xs) //显示延迟程序
{ unsigned int i,j;



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计