有大佬愿意幫忙看看么謝謝
板子是 普中科技的 51單片機板
ad 用的tlc2543cn
用12864顯示
輸入正弦破 和矩形波 有圖片
制作出來的實物圖如下:
IMG_20181015_205937.jpg (1.74 MB, 下載次數: 8)
下載附件
2018-10-15 21:03 上傳
IMG_20181015_210121.jpg (1.39 MB, 下載次數: 9)
下載附件
2018-10-15 21:03 上傳
IMG_20181015_210134.jpg (1.68 MB, 下載次數: 8)
下載附件
2018-10-15 21:03 上傳
IMG_20181015_210146.jpg (1.4 MB, 下載次數: 8)
下載附件
2018-10-15 21:03 上傳
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar xdata read_data[127];
- uchar q=1;
- sbit RS=P2^6; //液晶屏io
- sbit RW=P2^5;
- sbit E=P2^7;
- sbit PSB=P2^4;
- sbit RST=P1^0;
- sbit CLOCK=P1^7; //ad io
- sbit D_IN=P1^6;
- sbit D_OUT=P1^4;
- sbit _CS=P1^3;
- void delay_12864(uint ys)
- {
- while(ys--);
- }
- void delay(uchar n)
- {
- uchar i;
- for(i=0;i<n;i++)
- {
- _nop_();
- }
- }
- uint read2543(uchar port) //tlc2543 配置
- uint ad=0,i;
- CLOCK=0;
- _CS=0;
- port<<=4;
- for(i=0;i<12;i++)
- {
- if(D_OUT)ad|=0x01;
- D_IN=(bit)(port&0x80);
- // delay_12864(100);
- CLOCK=1;
- delay(3);
- CLOCK=0;
- delay(3);
- port<<=1;
- ad<<=1;
- }
- _CS=1;
- ad>>=1;
- return(ad);
- }
- void lcd_busy()
- {
- RS=0;
- RW=1;
- P0=0xff;
- E=1;
- // delay_12864(1);
- while((P0&0x80)==0x80);
- E=0;
- }
- void wrtcom_12864(uchar dat)
- {
- lcd_busy();
- RS=0;
- RW=0;
- E=0;
- // delay_12864(1);
- E=1;
- P0=dat;
- E=0;
- }
- void wrtdat_12864(uchar date1)
- {
- lcd_busy();
- RS=1;
- RW=0;
- E=0;
- // delay_12864(1);
- E=1;
- P0=date1;
- E=0;
- }
- uchar reddat_12864()
- {
- uchar a;
- lcd_busy();
- RS=1;
- RW=1;
- E=0;
- // delay_12864(1);
- E=1;
- a=P0;
- E=0;
- // delay_12864(5);
-
- return a;
- }
- void initial_12864() // 初始化
- {
- PSB=1;
- RST=1;
- wrtcom_12864(0x30);
- // delay5ms();
- wrtcom_12864(0x0c);
- // delay5ms();
- wrtcom_12864(0x01);
- // delay5ms();
- }
- void clnGDR_12864(void) //清屏
- {
- unsigned char j,k;
- wrtcom_12864(0x34);
- for( j = 0 ; j < 32 ; j++ )
- {
- wrtcom_12864(0x80 + j) ;
- wrtcom_12864(0x80) ;
- for( k = 0 ; k < 32 ; k++ )
- {
- wrtdat_12864( 0x00 );
- }
- }
- }
- void drawdot_12864(unsigned char y,unsigned char x,unsigned char type) // 液晶顯示
- {
- unsigned char X,Y,k;
- unsigned char DH,DL;
- if(y >= 0 && y<= 63 && x >= 0 && x <= 127)
- {
- if(y < 32)
- {
- X = 0x80 + (x >> 4);
- Y = 0x80 + y;
- }
- else
- {
- X = 0x88 + (x >> 4);
- Y = 0x80 + (y - 32);
- }
- wrtcom_12864(0x34);
- wrtcom_12864(Y);
- wrtcom_12864(X);
- DH = reddat_12864();
- DH = reddat_12864();
- DL = reddat_12864();
- k = x % 16;
- switch(type)
- {
- case 0:
- if(k < 8)
- {
- DH &= ~(0x01 << (7 - k));
- }
- else
- {
- DL &= ~(0x01 << (7 - (k % 8)));
- }
- break;
- case 1:
- if(k < 8)
- {
- DH |= (0x01 << (7 - k));
- }
- else
- {
- DL |= (0x01 << (7 - (k % 8)));
- }
- break;
- case 2:
- if(k < 8)
- {
- DH ^= (0x01 << (7 - k));
- }else
- {
- DL ^= (0x01 << (7 - (k % 8)));
- }
- break;
- default:
- break;
- }
- wrtcom_12864(Y);
- wrtcom_12864(X);
- wrtdat_12864(DH);
- wrtdat_12864(DL);
- // wrtcom_12864(0x30);
- wrtcom_12864(0x36);
- }
- }
- void Read_xpt() //ad 信號 處理
- {
- uchar a,i,b,e=0,c=0,d=0;
- for(a=0;a<127;a++)
- {
- b=read2543(0);
- for(i=0;i<12;i++)
- {
- e=b&(0x001<<i);
- if(e>0)
- {
- switch(i)
- {
- case 0 : c=0; break;
- case 1 : c=1; break;
- case 2 : c=2; break;
- case 3 : c=3; break;
- case 4 : c=4; break;
- case 5 : c=5; break;
- case 6 : c=6; break;
- case 7 : c=7; break;
- case 8 : c=8; break;
- case 9 : c=9; break;
- case 10 : c=10; break;
- case 11 : c=11; break;
- }
- }
- else
- {
- c=0;
- }
- d=c+d;
- }
- read_data[a]=d;
- d=0;
- }
- }
- void qujian(uchar i) //液晶屏位置選擇
- {
- uchar a,b;
- a=i/10;
- b=i%10;
- if(a==0)
- {
- switch(b)
- {
- case(0): drawdot_12864(54,q,1); break;
- case(1): drawdot_12864(53,q,1); break;
- case(2): drawdot_12864(52,q,1); break;
- case(3): drawdot_12864(51,q,1); break;
- case(4): drawdot_12864(50,q,1); break;
- case(5): drawdot_12864(49,q,1); break;
- case(6): drawdot_12864(48,q,1); break;
- case(7): drawdot_12864(47,q,1); break;
- case(8): drawdot_12864(46,q,1); break;
- case(9): drawdot_12864(45,q,1); break;
- }
- }
- if(a==1)
- {
- switch(b)
- {
- case(0): drawdot_12864(44,q,1); break;
- case(1): drawdot_12864(43,q,1); break;
- case(2): drawdot_12864(42,q,1); break;
- case(3): drawdot_12864(41,q,1); break;
- case(4): drawdot_12864(40,q,1); break;
- case(5): drawdot_12864(39,q,1); break;
- case(6): drawdot_12864(38,q,1); break;
- case(7): drawdot_12864(37,q,1); break;
- case(8): drawdot_12864(36,q,1); break;
- case(9): drawdot_12864(35,q,1); break;
- }
- }
- if(a==2)
- {
- switch(b)
- {
- case(0): drawdot_12864(34,q,1); break;
- case(1): drawdot_12864(33,q,1); break;
- case(2): drawdot_12864(32,q,1); break;
- case(3): drawdot_12864(31,q,1); break;
- case(4): drawdot_12864(30,q,1); break;
- case(5): drawdot_12864(29,q,1); break;
- case(6): drawdot_12864(28,q,1); break;
- case(7): drawdot_12864(27,q,1); break;
- case(8): drawdot_12864(26,q,1); break;
- case(9): drawdot_12864(25,q,1); break;
- }
- }
- if(a==3)
- {
- switch(b)
- {
- case(0): drawdot_12864(24,q,1); break;
- case(1): drawdot_12864(23,q,1); break;
- case(2): drawdot_12864(22,q,1); break;
- case(3): drawdot_12864(21,q,1); break;
- case(4): drawdot_12864(20,q,1); break;
- case(5): drawdot_12864(19,q,1); break;
- case(6): drawdot_12864(18,q,1); break;
- case(7): drawdot_12864(17,q,1); break;
- case(8): drawdot_12864(16,q,1); break;
- case(9): drawdot_12864(15,q,1); break;
- }
- }
- if(a==4)
- {
- switch(b)
- {
- case(0): drawdot_12864(14,q,1); break;
- case(1): drawdot_12864(13,q,1); break;
- case(2): drawdot_12864(12,q,1); break;
- case(3): drawdot_12864(11,q,1); break;
- case(4): drawdot_12864(10,q,1); break;
- case(5): drawdot_12864(9,q,1); break;
- case(6): drawdot_12864(8,q,1); break;
- case(7): drawdot_12864(7,q,1); break;
- case(8): drawdot_12864(6,q,1); break;
- case(9): drawdot_12864(5,q,1); break;
- }
- }
- delay_12864(1000);
- }
- void main(void)
- {
- uchar i1,i2,i3;
- uchar u;
- // delay_12864(10);
- initial_12864();
- clnGDR_12864();
- for(i1=0;i1<128;i1++) // 顯示 x軸
- drawdot_12864(32,i1,1);
- for(i2=0;i2<64;i2++) // 顯示 y軸
- drawdot_12864(i2,0,1);
- while(1)
- {
- Read_xpt();
- for(i3=0;i3<127;i3++)
- {
- delay_12864(100);
- qujian(read_data[i3]);
- q++;
- if(q>127)
- q=1;
- wrtcom_12864(0x36);
- for(u=0;u<50;u++);
- }
- clnGDR_12864();
- }
- }
復制代碼
|