📄 voidce.c
字号:
#include "include.h"
unsigned char code dizhibiao[]={
0x00,0x00,0x00,0x4b,0x00,0x96,0x00,0xe1,0x01,0x2c,0x01,0x77,0x01,0xc2,0x02,0x0d,
0x02,0x58,0x02,0xa3,0x02,0xee,0x03,0x39,0x03,0x84,0x03,0xcf,0x04,0x1a,0x04,0x65,
0x04,0xb0,0x04,0xfb,0x05,0x46,0x05,0x91,0x05,0xdc,0x06,0x27,0x06,0x72,0x06,0xbd,
0x07,0x08,0x07,0x53,0x07,0x9e,0x07,0xe9,0x08,0x34,0x08,0x7f,0x08,0xca,0x09,0x15};
unsigned int duanhaozub[32];
//unsigned int duanhaozu[32]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f};
int a,b,c,i;
/*--------------------------------------------
金额 9999.99
将一个浮点数按位拆开放入一个数组的第i位起
x:金额0x0f 总金额0x10
----------------------------------------------*/
uchar voice_yuan(uchar x,float num)
{
uchar i=0;
uint num_int; //整数部分
uint num_fra; //小数部分
num_int=(uint)num;
num_fra=(uint)((num-num_int)*100);
//--------------------------------------------转换整数部分
duanhaozub[i]=x; //"金额"
i++;
if(num_int>=1000)
{
duanhaozub[i]=num_int/1000; //转换千位
i++;
duanhaozub[i]=(num_int%1000)/100;//转换百位
i++;
duanhaozub[i]=(num_int%100)/10; //转换十位
i++;
duanhaozub[i]=num_int%10; //转换个位
}
else if(num_int>=100)
{
duanhaozub[i]=num_int/100; //转换百位
i++;
duanhaozub[i]=(num_int%100)/10; //转换十位
i++;
duanhaozub[i]=num_int%10; //转换个位
}
else if(num_int>=10)
{
duanhaozub[i]=num_int/10; //转换十位
i++;
duanhaozub[i]=num_int%10; //转换个位
}
else
{
duanhaozub[i]=num_int; //转换个位
}
i++;
duanhaozub[i]=0x0b; //转换小数点
i++;
//-----------------------------------------------转换小数部分
duanhaozub[i]=num_fra/10; //转换十分位
i++;
duanhaozub[i]=num_fra%10; //转换千分位
i++;
duanhaozub[i]=0x0c; //"元"
i++;
return i;
}
/*--------------------------------------------
重量 99.999
将一个浮点数按位拆开放入一个数组的第i位起
----------------------------------------------*/
uchar voice_zhong(float num)
{
uchar i=0;
uint num_int; //整数部分
uint num_fra; //小数部分
num_int=(uint)num;
num_fra=(uint)((num-num_int)*1000);
//--------------------------------------------转换整数部分
duanhaozub[i]=0x0e; //"金额"
i++;
if(num_int>=10)
{
duanhaozub[i]=num_int/10; //转换十位
i++;
duanhaozub[i]=num_int%10; //转换个位
}
else
{
duanhaozub[i]=num_int; //转换个位
}
i++;
duanhaozub[i]=0x0b; //转换小数点
i++;
//-----------------------------------------------转换小数部分
duanhaozub[i]=num_fra/100; //转换十分位
i++;
duanhaozub[i]=(num_fra%100)/10;
i++;
duanhaozub[i]=num_fra%10; //转换千分位
i++;
duanhaozub[i]=0x0d; //"元"
i++;
return i;
}
//***************************
//串行发送子程序 8BIT
void send(unsigned char isdx)
{ unsigned char isxcounter;
SS=0;
SCLK=0;
for(isxcounter=0;isxcounter<8;isxcounter++)
{if((isdx&0x01)==1)
MOSI=1;
else
MOSI=0;
isdx=isdx>>1;
SCLK=1;
delay(24);
SCLK=0;
delay(24);
}
}
//****************************
//发送STOP指令,延时50MS
void isdstop(void)
{
delay(120);
send(0x30);
SS=1;
delay_ms(600);
}
//****************************
//发送上电指令,延时50MS
void isdpwrup(void)
{
delay(120);
SS=0;
send(0x20);
SS=1;
delay_ms(600);
}
//****************************
//发送掉电指令,延时50MS
void isdpwrdown(void)
{
delay(120);
send(0x10);
SS=1;
delay_ms(600);
}
//****************************
//****************************
//发送setplay指令
void setplay(unsigned char adh,unsigned char adl)
{
delay_ms(24);
send(adl);
delay(24);
send(adh);
delay(24);
send(0xe0);
SS=1;
send(0xf0);
SS=1;
}
//****************************
//PALY 全部的函数
void play(uchar n)
{
for(i=0;i<n;i++)
{
// a=duanhaozu[i]*2;//调用数组duanhaozu
a=duanhaozub[i]*2;//或者数组duanhaozub
_nop_();
b=dizhibiao[a];
_nop_();
a=a+1;
c=dizhibiao[a];
_nop_();
setplay(b,c);
delay(20);
while(ISDINT==1)//EOM未中断
{;}//若''中断‘’,向下执行
LED=1;
isdstop();
}
}
//************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -