AVR16语音三线串口控制程序
单片机源程序如下:
- #include <iom16v.h>
- #include <macros.h>
- #include <eeprom.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- #define mclk 16000000 //定义时钟频率
- const address[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c};//0—9,0a中放现在的温度为,0b中放点,0c中放摄氏度
- #define rst PB0 //复位
- #define cs PB1 //片选端
- #define clk PB2 //时钟
- #define data PB3 //数据位
- #define busy PINB&0X10 //忙信号PB4
- #define rst1 PORTB|=(1<<PB0)
- #define rst0 PORTB&=~(1<<PB0)
- #define cs1 PORTB|=(1<<PB1)
- #define cs0 PORTB&=~(1<<PB1)
- #define clk1 PORTB|=(1<<PB2)
- #define clk0 PORTB&=~(1<<PB2)
- #define data1 PORTB|=(1<<PB3)
- #define data0 PORTB&=~(1<<PB3)
- uchar a,b,c;
- void Port_init(void)
- {
- DDRB=0XEF;
- PORTB=0XFF;
- }
- /********延时区域*********/
- void delay_nus(uint x) //n微妙延时程序
- {
- unsigned int i;
- for(i=x;i>0;i--)
- {asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- asm("nop");
- }
- }
- void delay_1ms(void) //一毫秒延时程序
- {
- unsigned int i;
- for(i=0;i<2286;i++); //晶振数*143-2
- }
- void delay_nms(unsigned int x)
- {
-
- unsigned int i;
- for(i=x;i>0;i--)
- {
- delay_1ms();
- }
- }
- /****************************************
- 函数名:void send_com(uchar add)
- 功能:发码播放,add为语音地址
- *****************************************/
- void send_com(uchar add)
- {
- uchar i;
- rst1;
- rst0;
- delay_nms(5);
- rst1;
- delay_nms(20);
- cs0;
- delay_nms(5);
- for(i=0;i<8;i++)
- {
- clk0;
- if(add&1)
- data1;
- else
- data0;
- delay_nus(300);
- clk1;
- delay_nus(300);
- add=add>>1;
- }
- cs1;
- }
- /******************************************
- 函数名:void wendujisuan()
- 功能:温度处理
- *****************************************/
- void wendujisuan(uint m1)
- {
- a=m1/100;
- b=m1%100/10;
- c=m1%100;
- }
-
- /******************************************
- 函数名:void sound()
- 功能:播报温度
- *****************************************/
- void sound()
- {
-
- while(!busy);
- send_com(0x0a);//播放"现在的温度为"
- delay_nms(500);
- while(!busy);
- send_com(a);
- delay_nms(500);
- while(!busy);
- send_com(b);
- delay_nms(500);
- while(!busy);
- send_com(11);
- delay_nms(500);
- while(!busy);
- send_com(c);
- delay_nms(500);
- while(!busy);
- send_com(12);
- delay_nms(500);
- while(!busy);
- }
- void main()
- {
- Port_init();
- while(1)
- {
- wendujisuan(325);
- sound();
- }
- }
复制代码
所有资料51hei提供下载:
语音三线串口16M好使.zip
(1.09 KB, 下载次数: 9)
|