1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
| /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
TLC5615输出1024点正弦波 【注意事项】 2.TLC5615 DA模块本身必须使用5V电源,控制信号可以接受3.3V或者5V。 【IO配置】 DIN ---> P1.0 SCLK ---> P1.1 CS ---> P1.2 Dout ---> 空,未定义 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ #include<reg52.h> //包含51单片机寄存器定义的头文件 #include<intrins.h> //包含nop函数的头文件 #define uchar unsigned char //宏定义 #define uint unsigned int //宏定义 sbit DIN =P1^0; //IO定义 sbit SCLK =P1^1; sbit CS =P1^2;
uint code sin1[1024]= //1024点12位数据的正弦波表 { 0x1FF,0x202,0x205,0x208,0x20C,0x20F,0x212,0x215,0x218,0x21B,0x21E,0x221,0x225,0x228,0x22B,0x22E ,0x231,0x234,0x237,0x23A,0x23E,0x241,0x244,0x247,0x24A,0x24D,0x250,0x253,0x256,0x25A,0x25D,0x260 ,0x263,0x266,0x269,0x26C,0x26F,0x272,0x275,0x278,0x27B,0x27E,0x281,0x284,0x287,0x28A,0x28D,0x290 ,0x293,0x296,0x299,0x29C,0x29F,0x2A2,0x2A5,0x2A8,0x2AB,0x2AE,0x2B1,0x2B4,0x2B7,0x2BA,0x2BD,0x2C0 ,0x2C3,0x2C6,0x2C9,0x2CB,0x2CE,0x2D1,0x2D4,0x2D7,0x2DA,0x2DD,0x2DF,0x2E2,0x2E5,0x2E8,0x2EB,0x2ED ,0x2F0,0x2F3,0x2F6,0x2F8,0x2FB,0x2FE,0x301,0x303,0x306,0x309,0x30B,0x30E,0x311,0x313,0x316,0x319 ,0x31B,0x31E,0x320,0x323,0x326,0x328,0x32B,0x32D,0x330,0x332,0x335,0x337,0x33A,0x33C,0x33F,0x341 ,0x343,0x346,0x348,0x34B,0x34D,0x34F,0x352,0x354,0x357,0x359,0x35B,0x35D,0x360,0x362,0x364,0x366 ,0x369,0x36B,0x36D,0x36F,0x371,0x374,0x376,0x378,0x37A,0x37C,0x37E,0x380,0x382,0x384,0x386,0x388 ,0x38A,0x38C,0x38E,0x390,0x392,0x394,0x396,0x398,0x39A,0x39C,0x39E,0x39F,0x3A1,0x3A3,0x3A5,0x3A7 ,0x3A8,0x3AA,0x3AC,0x3AD,0x3AF,0x3B1,0x3B2,0x3B4,0x3B6,0x3B7,0x3B9,0x3BA,0x3BC,0x3BE,0x3BF,0x3C1 ,0x3C2,0x3C4,0x3C5,0x3C6,0x3C8,0x3C9,0x3CB,0x3CC,0x3CD,0x3CF,0x3D0,0x3D1,0x3D3,0x3D4,0x3D5,0x3D6 ,0x3D8,0x3D9,0x3DA,0x3DB,0x3DC,0x3DD,0x3DE,0x3E0,0x3E1,0x3E2,0x3E3,0x3E4,0x3E5,0x3E6,0x3E7,0x3E8 ,0x3E8,0x3E9,0x3EA,0x3EB,0x3EC,0x3ED,0x3EE,0x3EE,0x3EF,0x3F0,0x3F1,0x3F1,0x3F2,0x3F3,0x3F3,0x3F4 ,0x3F5,0x3F5,0x3F6,0x3F6,0x3F7,0x3F7,0x3F8,0x3F8,0x3F9,0x3F9,0x3FA,0x3FA,0x3FB,0x3FB,0x3FB,0x3FC ,0x3FC,0x3FC,0x3FD,0x3FD,0x3FD,0x3FD,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE ,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE,0x3FE,0x3FD,0x3FD,0x3FD,0x3FD,0x3FC ,0x3FC,0x3FC,0x3FB,0x3FB,0x3FB,0x3FA,0x3FA,0x3F9,0x3F9,0x3F8,0x3F8,0x3F7,0x3F7,0x3F6,0x3F6,0x3F5 ,0x3F5,0x3F4,0x3F3,0x3F3,0x3F2,0x3F1,0x3F1,0x3F0,0x3EF,0x3EE,0x3EE,0x3ED,0x3EC,0x3EB,0x3EA,0x3E9 ,0x3E8,0x3E8,0x3E7,0x3E6,0x3E5,0x3E4,0x3E3,0x3E2,0x3E1,0x3E0,0x3DE,0x3DD,0x3DC,0x3DB,0x3DA,0x3D9 ,0x3D8,0x3D6,0x3D5,0x3D4,0x3D3,0x3D1,0x3D0,0x3CF,0x3CD,0x3CC,0x3CB,0x3C9,0x3C8,0x3C6,0x3C5,0x3C4 ,0x3C2,0x3C1,0x3BF,0x3BE,0x3BC,0x3BA,0x3B9,0x3B7,0x3B6,0x3B4,0x3B2,0x3B1,0x3AF,0x3AD,0x3AC,0x3AA ,0x3A8,0x3A7,0x3A5,0x3A3,0x3A1,0x39F,0x39E,0x39C,0x39A,0x398,0x396,0x394,0x392,0x390,0x38E,0x38C ,0x38A,0x388,0x386,0x384,0x382,0x380,0x37E,0x37C,0x37A,0x378,0x376,0x374,0x371,0x36F,0x36D,0x36B ,0x369,0x366,0x364,0x362,0x360,0x35D,0x35B,0x359,0x357,0x354,0x352,0x34F,0x34D,0x34B,0x348,0x346 ,0x343,0x341,0x33F,0x33C,0x33A,0x337,0x335,0x332,0x330,0x32D,0x32B,0x328,0x326,0x323,0x320,0x31E ,0x31B,0x319,0x316,0x313,0x311,0x30E,0x30B,0x309,0x306,0x303,0x301,0x2FE,0x2FB,0x2F8,0x2F6,0x2F3 ,0x2F0,0x2ED,0x2EB,0x2E8,0x2E5,0x2E2,0x2DF,0x2DD,0x2DA,0x2D7,0x2D4,0x2D1,0x2CE,0x2CB,0x2C9,0x2C6 ,0x2C3,0x2C0,0x2BD,0x2BA,0x2B7,0x2B4,0x2B1,0x2AE,0x2AB,0x2A8,0x2A5,0x2A2,0x29F,0x29C,0x299,0x296 ,0x293,0x290,0x28D,0x28A,0x287,0x284,0x281,0x27E,0x27B,0x278,0x275,0x272,0x26F,0x26C,0x269,0x266 ,0x263,0x260,0x25D,0x25A,0x256,0x253,0x250,0x24D,0x24A,0x247,0x244,0x241,0x23E,0x23A,0x237,0x234 ,0x231,0x22E,0x22B,0x228,0x225,0x221,0x21E,0x21B,0x218,0x215,0x212,0x20F,0x20C,0x208,0x205,0x202 ,0x1FF,0x1FC,0x1F9,0x1F6,0x1F2,0x1EF,0x1EC,0x1E9,0x1E6,0x1E3,0x1E0,0x1DC,0x1D9,0x1D6,0x1D3,0x1D0 ,0x1CD,0x1CA,0x1C7,0x1C3,0x1C0,0x1BD,0x1BA,0x1B7,0x1B4,0x1B1,0x1AE,0x1AB,0x1A8,0x1A4,0x1A1,0x19E ,0x19B,0x198,0x195,0x192,0x18F,0x18C,0x189,0x186,0x183,0x180,0x17D,0x17A,0x177,0x174,0x171,0x16E ,0x16B,0x168,0x165,0x162,0x15F,0x15C,0x159,0x156,0x153,0x150,0x14D,0x14A,0x147,0x144,0x141,0x13E ,0x13B,0x138,0x135,0x133,0x130,0x12D,0x12A,0x127,0x124,0x121,0x11F,0x11C,0x119,0x116,0x113,0x111 ,0x10E,0x10B,0x108,0x106,0x103,0x100,0x0FD,0x0FB,0x0F8,0x0F5,0x0F3,0x0F0,0x0ED,0x0EB,0x0E8,0x0E5 ,0x0E3,0x0E0,0x0DE,0x0DB,0x0D8,0x0D6,0x0D3,0x0D1,0x0CE,0x0CC,0x0C9,0x0C7,0x0C4,0x0C2,0x0BF,0x0BD ,0x0BB,0x0B8,0x0B6,0x0B3,0x0B1,0x0AF,0x0AC,0x0AA,0x0A7,0x0A5,0x0A3,0x0A1,0x09E,0x09C,0x09A,0x098 ,0x095,0x093,0x091,0x08F,0x08D,0x08A,0x088,0x086,0x084,0x082,0x080,0x07E,0x07C,0x07A,0x078,0x076 ,0x074,0x072,0x070,0x06E,0x06C,0x06A,0x068,0x066,0x064,0x062,0x060,0x05F,0x05D,0x05B,0x059,0x057 ,0x056,0x054,0x052,0x051,0x04F,0x04D,0x04C,0x04A,0x048,0x047,0x045,0x044,0x042,0x040,0x03F,0x03D ,0x03C,0x03A,0x039,0x038,0x036,0x035,0x033,0x032,0x031,0x02F,0x02E,0x02D,0x02B,0x02A,0x029,0x028 ,0x026,0x025,0x024,0x023,0x022,0x021,0x020,0x01E,0x01D,0x01C,0x01B,0x01A,0x019,0x018,0x017,0x016 ,0x016,0x015,0x014,0x013,0x012,0x011,0x010,0x010,0x00F,0x00E,0x00D,0x00D,0x00C,0x00B,0x00B,0x00A ,0x009,0x009,0x008,0x008,0x007,0x007,0x006,0x006,0x005,0x005,0x004,0x004,0x003,0x003,0x003,0x002 ,0x002,0x002,0x001,0x001,0x001,0x001,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000 ,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x001,0x001,0x001,0x001,0x002 ,0x002,0x002,0x003,0x003,0x003,0x004,0x004,0x005,0x005,0x006,0x006,0x007,0x007,0x008,0x008,0x009 ,0x009,0x00A,0x00B,0x00B,0x00C,0x00D,0x00D,0x00E,0x00F,0x010,0x010,0x011,0x012,0x013,0x014,0x015 ,0x016,0x016,0x017,0x018,0x019,0x01A,0x01B,0x01C,0x01D,0x01E,0x020,0x021,0x022,0x023,0x024,0x025 ,0x026,0x028,0x029,0x02A,0x02B,0x02D,0x02E,0x02F,0x031,0x032,0x033,0x035,0x036,0x038,0x039,0x03A ,0x03C,0x03D,0x03F,0x040,0x042,0x044,0x045,0x047,0x048,0x04A,0x04C,0x04D,0x04F,0x051,0x052,0x054 ,0x056,0x057,0x059,0x05B,0x05D,0x05F,0x060,0x062,0x064,0x066,0x068,0x06A,0x06C,0x06E,0x070,0x072 ,0x074,0x076,0x078,0x07A,0x07C,0x07E,0x080,0x082,0x084,0x086,0x088,0x08A,0x08D,0x08F,0x091,0x093 ,0x095,0x098,0x09A,0x09C,0x09E,0x0A1,0x0A3,0x0A5,0x0A8,0x0AA,0x0AC,0x0AF,0x0B1,0x0B3,0x0B6,0x0B8 ,0x0BB,0x0BD,0x0BF,0x0C2,0x0C4,0x0C7,0x0C9,0x0CC,0x0CE,0x0D1,0x0D3,0x0D6,0x0D8,0x0DB,0x0DE,0x0E0 ,0x0E3,0x0E5,0x0E8,0x0EB,0x0ED,0x0F0,0x0F3,0x0F5,0x0F8,0x0FB,0x0FD,0x100,0x103,0x106,0x108,0x10B ,0x10E,0x111,0x113,0x116,0x119,0x11C,0x11F,0x121,0x124,0x127,0x12A,0x12D,0x130,0x133,0x135,0x138 ,0x13B,0x13E,0x141,0x144,0x147,0x14A,0x14D,0x150,0x153,0x156,0x159,0x15C,0x15F,0x162,0x165,0x168 ,0x16B,0x16E,0x171,0x174,0x177,0x17A,0x17D,0x180,0x183,0x186,0x189,0x18C,0x18F,0x192,0x195,0x198 ,0x19B,0x19E,0x1A1,0x1A4,0x1A8,0x1AB,0x1AE,0x1B1,0x1B4,0x1B7,0x1BA,0x1BD,0x1C0,0x1C4,0x1C7,0x1CA ,0x1CD,0x1D0,0x1D3,0x1D6,0x1D9,0x1DD,0x1E0,0x1E3,0x1E6,0x1E9,0x1EC,0x1EF,0x1F2,0x1F6,0x1F9,0x1FC}; void delay\_us(unsigned char n) //us级延时函数 { unsigned char i; for(i=0;i<n;i++); } /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 1.sclk的上升沿数据进入输入寄存器 2.在sclk为低的时候,CS的上升沿数据开始DA转化 3.连续输入12位数据,高位在前,其中前10位有效,后两位补0 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ void output(uint DA_Value) //TLC5615驱动函数 { unsigned char i; DA_Value=DA_Value<<6; //将DA\_Value左移6位,即nnnn nnnn nnnn变为nnnn nnnn nn00 0000 SCLK=0; //为低,准备输入数据 CS=0; //片选 for(i=12;i>0;i--) //从高位开始,连续取出12位数据, { if(DA_Value&0x8000) //和1000 0000 0000 0000 求与,获取最高位的值。 DIN=1; else DIN=0; SCLK=1; //上升沿,进入输入寄存器 SCLK=0; //准备下一次输入 DA_Value=DA_Value<<1; //左移1位,准备输入下一位数据 } CS=1; //在sclk为低的时候,CS上升沿,数据开始DA转化 } void main() { uint i; while(1) { i=0; for(i=0;i<1023;i++) //连续取出1024点正弦数据 output(sin1[i]); //输出正弦波 } }
|