wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4532|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

定位顯示系統(tǒng)msp430程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
定位顯示系統(tǒng)msp430程序

  1. #include "msp430g2553.h"
  2. #include "math.h"
  3. #define SENDCOMM 0XF8     //0XF1000
  4. #define READCOMM 0XFC     //0XF1100
  5. #define SENDDATA 0XFA     //0XF1010
  6. #define READDATA 0XFE     //0XF1110
  7. /*-----12864串行定義--------*/
  8. #define E_CLK_0  P1OUT &= ~BIT7         //時(shí)鐘信號(hào)為0
  9. #define E_CLK_1  P1OUT |= BIT7                //時(shí)鐘信號(hào)為1
  10. #define RW_SID_0  P1OUT &= ~BIT6        //數(shù)據(jù)信號(hào)為0
  11. #define RW_SID_1  P1OUT |= BIT6                //數(shù)據(jù)信號(hào)為1
  12. /*-----12864工作方式定義-------*/
  13. #define EXTEND_SET 0x34//擴(kuò)展指令集,繪圖顯示關(guān)
  14. #define DRAW_ON 0x36 //繪圖顯示開
  15. #define DRAW_OFF 0x34 //繪圖顯示關(guān)
  16. #define BASIC_SET 0x30//基本指令集

  17. #define FOSC 16000000
  18. #define Machine_cycle 1.0/FOSC
  19. #define Sound 340
  20. /*------LCD12864基本函數(shù)-------*/
  21. void LCD_send_byte(unsigned char a);
  22. unsigned char LCD_read_byte();
  23. void LCD_write_com(unsigned char comm);
  24. void LCD_write_data(unsigned char lcd_data);
  25. void LCD_set_addr(unsigned char x, unsigned char y);
  26. void LCD_write_string(unsigned char addr_x, unsigned char addr_y, char* str);
  27. void LCD_list_num(unsigned char x,unsigned char y,long number);
  28. void LCD_list_Decimal(unsigned char x,unsigned char y,double Decimal);
  29. void LCD_init(void);
  30. void LCD_write_char(unsigned char x, unsigned char y,unsigned char flag, char data);
  31. void LCD_clear(void);
  32. unsigned char LCD_read_data();
  33. void check_busy();
  34. /*-----LCD12864繪圖函數(shù)-------*/
  35. void GUI_clear();  //繪圖清屏函數(shù) (清屏指令在畫圖時(shí)不能使用)
  36. void GUI_draw_full_picture(const unsigned char *dat);//畫滿屏圖片,橫向取模
  37. //void LCD_set_dot(unsigned char x,unsigned char y);//打點(diǎn)程序
  38. //void GUI_hline(unsigned char x0,unsigned char x1,unsigned char y);//畫水平線函數(shù),x0,x1為起始點(diǎn)和終點(diǎn)的水平坐標(biāo),y為垂直坐標(biāo)
  39. /*---------鍵盤函數(shù)---------*/
  40. unsigned char getkey(void);
  41. void GPIO_init();
  42. void TIMER0_init();
  43. void TIMER1_init();
  44. void Calculation();

  45. unsigned char num[] = {"0123456789ABCDEF"};
  46. unsigned char key_t,key,t;
  47. unsigned char odd;
  48. unsigned long cap1_2=0;
  49. unsigned long cap2_0=0;
  50. unsigned long cap2_1=0;
  51. unsigned long cap2_4=0;
  52. unsigned int flag=0;
  53. double x=0,y=0;
  54. double X[20];
  55. double Y[20];

  56. void main(void) {
  57.         WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
  58.         DCOCTL=CALDCO_16MHZ;
  59.         BCSCTL1=CALBC1_16MHZ;
  60.         IFG1 &= ~OFIFG; // Clear OSCFault flag
  61.         LCD_init();
  62.         LCD_clear();
  63.         GPIO_init();
  64.         TIMER0_init();
  65.         TIMER1_init();
  66.         LCD_write_string(1,8,"坐標(biāo)");
  67.         _EINT();//開全局中斷
  68.         while(1)
  69.         {
  70.                 if(cap1_2!=0)
  71.                         if(cap2_0!=0)
  72.                                 if(cap2_1!=0)
  73.                                         if(cap2_4!=0)
  74.                                         {
  75.                                                 _DINT();
  76.                                                 TA0CTL&=~MC_2;
  77.                                                 TA1CTL&=~MC_2;
  78.                                                 Calculation();
  79.                                                 cap1_2=0;
  80.                                                 cap2_0=0;
  81.                                                 cap2_1=0;
  82.                                                 cap2_4=0;
  83.                                                 TA0CCR1=0x0000;
  84.                                                 TA1CCR0=0x0000;
  85.                                                 TA1CCR1=0x0000;
  86.                                                 TA1CCR2=0x0000;
  87.                                                 P1SEL&=~BIT2;
  88.                                                 P1OUT&=~BIT2;
  89.                                                 _delay_cycles(10);
  90.                                                 P1IE|=BIT2;
  91.                                                 _EINT();
  92.                                         }
  93.         }
  94. }
  95. //P1口外部中斷
  96. #pragma vector=PORT1_VECTOR
  97. __interrupt void Port_1(void)
  98. {
  99.         if(P1IFG&BIT2)
  100.         {
  101.                 P1OUT^=BIT0;
  102.                 P1IE&=~BIT2;  //1.2禁止中斷
  103.                 P1OUT|=BIT2; //1.2輸出
  104.                 P1SEL|=BIT2; //p1.2外圍模塊功能
  105.                 _delay_cycles(10);
  106.                 TA0CTL|=MC_2+TACLR; //MC2連續(xù)計(jì)數(shù)   TACLR清除
  107.                 TA1CTL|=MC_2+TACLR;
  108.                 TA0CCTL1|=CM_2+CCIE;//CM選擇捕獲  CCIE中斷允許
  109.                 TA1CCTL0|=CM_2+CCIE;
  110.                 TA1CCTL1|=CM_2+CCIE;
  111.                 TA1CCTL2|=CM_2+CCIE;
  112.                 P1IFG&=~BIT2;        //P1.2無(wú)中斷請(qǐng)求
  113.         }
  114. }

  115. // Timer A0 interrupt service routine
  116. #pragma vector=TIMER0_A1_VECTOR                           //A1定時(shí)  R0計(jì)數(shù)
  117. __interrupt void Timer0_A1(void)
  118. {
  119.         TA0CCTL1&=~CM_2;
  120.         TA0CCTL1&=~CCIE;
  121.         P1OUT^=BIT0;
  122.         cap1_2=TA0CCR1;
  123.         TA0CCTL1&=~CCIFG;
  124. }

  125. // Timer A1 interrupt service routine
  126. #pragma vector=TIMER1_A0_VECTOR       
  127. __interrupt void Timer1_A0(void)                                //A0定時(shí)  R1計(jì)數(shù)
  128. {
  129.         TA1CCTL0&=~CM_2;
  130.         TA1CCTL0&=~CCIE;
  131.         P1OUT^=BIT0;
  132.         cap2_0=TA1CCR0;
  133.         TA1CCTL0&=~CCIFG;
  134. }

  135. #pragma vector=TIMER1_A1_VECTOR                                //A1定時(shí)  R1計(jì)數(shù)
  136. __interrupt void Timer1_A1(void)
  137. {
  138.         switch(TA1IV)
  139.         {
  140.         case TA1IV_TACCR1:
  141.                 {
  142.                         TA1CCTL1&=~CM_2;
  143.                         TA1CCTL1&=~CCIE;
  144.                         P1OUT^=BIT0;
  145.                         cap2_1=TA1CCR1;
  146.                         TA1CCTL1&=~CCIFG;
  147.                         break;
  148.                 }
  149.         case TA1IV_TACCR2:
  150.                 {
  151.                         TA1CCTL2&=~CM_2;
  152.                         TA1CCTL2&=~CCIE;
  153.                         P1OUT^=BIT0;
  154.                         cap2_4=TA1CCR2;
  155.                         TA1CCTL2&=~CCIFG;
  156.                         break;
  157.                 }
  158.         default:break;
  159.         }
  160. }

  161. void GPIO_init()
  162. {
  163.         //標(biāo)志口
  164.         P1DIR|=BIT0;
  165.         P1OUT&=~BIT0;
  166.         _delay_cycles(20);
  167.         //p1.2外部中斷設(shè)置
  168.         P1DIR&=~BIT2;//輸入,上升沿觸發(fā),開中斷
  169.         P1REN|=BIT2;
  170.         P1OUT&=~BIT2;
  171.         P1IES&=~BIT2;
  172.         P1IE|=BIT2;
  173.         P1IFG&=~BIT2;
  174.         _delay_cycles(20);
  175.         //p2.0 p2.1 p2.4捕獲設(shè)置
  176.         P2DIR&=~BIT0+BIT1+BIT4;//設(shè)置P2.0,2.1,2.4為輸入
  177.         P2REN|=BIT0+BIT1+BIT4;
  178.         P2OUT|=BIT0+BIT1+BIT4;
  179.         P2SEL|=BIT0+BIT1+BIT4;
  180.         _delay_cycles(20);
  181. }

  182. void TIMER0_init()
  183. {
  184.         TA0CTL |= TASSEL_2+MC_0+TACLR;
  185.         TA0CCTL1|=CCIS_0+SCS+CAP+CM_0;
  186. }

  187. void TIMER1_init()
  188. {
  189.         TA1CTL |= TASSEL_2+MC_0+TACLR;
  190.         TA1CCTL0|=CCIS_0+SCS+CAP+CM_0;
  191.         TA1CCTL1|=CCIS_0+SCS+CAP+CM_0;
  192.         TA1CCTL2|=CCIS_0+SCS+CAP+CM_0;
  193. }

  194. void Calculation()
  195. {
  196.         long a,b,c,d;
  197.         double DA,DB,DC,DD;
  198.         double x1,x2,y1,y2;
  199.         DA=Sound*cap1_2*Machine_cycle*100.0;
  200.         DB=Sound*cap2_0*Machine_cycle*100.0;
  201.         DC=Sound*cap2_1*Machine_cycle*100.0;
  202.         DD=Sound*cap2_4*Machine_cycle*100.0;
  203.         x1=(DD*DD-DC*DC+250000*1.0)/(1000*1.0);
  204.         x2=(DA*DA-DB*DB+250000*1.0)/(1000*1.0);
  205.         y1=(DB*DB-DC*DC+122500*1.0)/(700*1.0);
  206.         y2=(DA*DA-DD*DD+122500*1.0)/(700*1.0);
  207.         if(flag<20)
  208.         {
  209.                 X[flag]=(x1+x2)*1.0/2.0;
  210.                 Y[flag]=(y1+y2)*1.0/2.0;
  211.                 flag++;
  212.         }
  213.         else
  214.         {
  215.                 for(flag=0;flag<20;flag++)
  216.                 {
  217.                         x=x+X[flag];
  218.                         y=y+Y[flag];
  219.                 }
  220.                 x=x*1.0/20.0;
  221.                 y=y*1.0/20.0;
  222.                 LCD_list_Decimal(2,4,x);
  223.                 LCD_list_Decimal(3,4,y);
  224.                 flag=0;
  225.         }
  226. //        a=cap1_2-cap1_2;
  227. //        b=cap2_0-cap1_2;
  228. //        c=cap2_1-cap1_2;
  229. //        d=cap2_4-cap1_2;
  230. //        LCD_list_num(1,1,a);
  231. //        LCD_list_num(2,1,b);
  232. //        LCD_list_num(3,1,c);
  233. //        LCD_list_num(4,1,d);
  234.         LCD_list_num(1,1,cap1_2);
  235.         LCD_list_num(2,1,cap2_0);
  236.         LCD_list_num(3,1,cap2_1);
  237.         LCD_list_num(4,1,cap2_4);
  238. }
  239. /*---------鍵盤函數(shù)---------*/
  240. unsigned char getkey(void) //獲得鍵盤的值
  241. {
  242.         P1REN |= BIT3 + BIT4 + BIT5;
  243.         P1DIR &= ~(BIT3 + BIT4 + BIT5);
  244.         P1OUT |= BIT3 + BIT4 + BIT5; //00111000
  245.         t = (P1IN & 0x38)/8;
  246.         if (t == 0x07) {
  247.                 P1REN |= BIT4 + BIT5;
  248.                 P1REN &= ~BIT3;
  249.                 P1DIR |= BIT3 + BIT4 + BIT5;
  250.                 P1OUT |= BIT4 + BIT5; //00110000
  251.                 P1OUT &= ~BIT3;
  252.                 P1DIR &= ~(BIT4 + BIT5);
  253.                 t = P1IN & 0x038;
  254.                 t = (t/8) / 2 + 7;
  255.                 if (t == 0x0a) {
  256.                         P1REN |= BIT5 + BIT3;
  257.                         P1REN &= ~BIT4;
  258.                         P1DIR |= BIT3 + BIT4 + BIT5;
  259.                         P1OUT |= BIT3+BIT5; //00101000
  260.                         P1OUT &= ~BIT4;
  261.                         P1DIR &= ~(BIT3 + BIT5);
  262.                         t = P1IN & 0x38;
  263.                         t = ((t/8) + 1) / 2 + 10;
  264.                         if (t == 0x0d) {
  265.                                 P1REN |= BIT3 + BIT4;
  266.                                 P1REN &= ~BIT5;
  267.                                 P1DIR |= BIT3 + BIT4 + BIT5;
  268.                                 P1OUT |= BIT3+BIT4; //00011000
  269.                                 P1OUT &= ~BIT5;
  270.                                 P1DIR &= ~(BIT3 + BIT4);
  271.                                 t = P1IN & 0x38;
  272.                                 t =(t/8)+13;
  273.                         }
  274.                 }
  275.         }
  276.         return (t);
  277. }

  278. void show_key()//顯示鍵盤的值
  279. {
  280.         key_t=getkey();
  281.         if(key_t!=16)
  282.         {
  283.                 _delay_cycles(20000);
  284.                 key=getkey();
  285.                 if(key==key_t)
  286.                 {
  287.                         while(1)
  288.                         {
  289.                                 key_t=getkey();
  290.                                 if(key_t==16)
  291.                                         break;
  292.                         }
  293.                 }
  294.                 else
  295.                 {
  296.                         key=16;
  297.                 }
  298.                 if(key==15)
  299.                         LCD_clear();
  300.                 else
  301.                         LCD_write_char(1, 2,0,num[key]);
  302.                 _delay_cycles(200000);
  303.         }
  304. }

  305. /*------LCD12864基本函數(shù)-------*/
  306. void check_busy()
  307. {
  308.         do
  309.         {
  310.                 LCD_send_byte(READCOMM);
  311.         }
  312.         while(LCD_read_byte()&0x80);
  313. }

  314. void LCD_send_byte(unsigned char a) {
  315.         unsigned char i=0;
  316.         for (i = 8; i > 0; i--) {
  317.                 if (a & (0x01 << (i - 1)))
  318.                         RW_SID_1;
  319.                 else
  320.                         RW_SID_0;
  321.                 _delay_cycles(100);
  322.                 E_CLK_1;
  323.                 _delay_cycles(100);
  324.                 E_CLK_0;
  325.                 _delay_cycles(100);
  326.         }
  327. }

  328. unsigned char LCD_read_byte()
  329. {
  330.         unsigned char i,j,temp1=0;
  331.         _delay_cycles(100);
  332.         P1DIR&=~BIT6;
  333.         RW_SID_1;
  334.         for(j=0;j<2;j++)
  335.         {
  336.                 for(i=0;i<4;i++)
  337.                 {
  338.                         if(P1IN&BIT6) temp1|=0x01;
  339.                         else temp1&=~0x01;
  340.                         temp1<<=1;
  341.                         E_CLK_0;
  342.                         _delay_cycles(100);
  343.                         E_CLK_1;
  344.                         _delay_cycles(100);
  345.                         E_CLK_0;
  346.                         _delay_cycles(100);
  347.                 }
  348.                 for(i=0;i<4;i++)
  349.                 {
  350.                         E_CLK_0;
  351.                         _delay_cycles(100);
  352.                         E_CLK_1;
  353.                         _delay_cycles(100);
  354.                         E_CLK_0;
  355.                         _delay_cycles(100);
  356.                 }
  357.         }
  358.         P1DIR|=BIT6;
  359.         return temp1;
  360. }

  361. unsigned char LCD_read_data()
  362. {
  363.         unsigned char temp;
  364.         LCD_send_byte(READDATA);
  365.         _delay_cycles(1000);
  366.         temp=LCD_read_byte();
  367.         return temp;
  368. }

  369. void LCD_write_com(unsigned char comm) {
  370.         unsigned char temp;
  371.         check_busy();
  372.         _delay_cycles(100);

  373.         LCD_send_byte(SENDCOMM); //MCU to LCD, command

  374.         temp = comm & 0XF0;
  375.         LCD_send_byte(temp); //send high 4 bits

  376.         temp = ((comm & 0X0F) << 4) & 0XF0;
  377.         LCD_send_byte(temp); //send low 4 bits

  378.         _delay_cycles(100);

  379. }

  380. void LCD_write_data(unsigned char lcd_data) //寫數(shù)據(jù)
  381. {
  382.         unsigned char temp;
  383.         check_busy();
  384.         _delay_cycles(100);
  385.         LCD_send_byte(SENDDATA);

  386.         temp = lcd_data & 0xf0;
  387.         LCD_send_byte(temp);

  388.         temp = (lcd_data & 0X0F) << 4;
  389.         LCD_send_byte(temp);

  390.         _delay_cycles(100);

  391. }

  392. void LCD_set_addr(unsigned char x, unsigned char y) //設(shè)置顯示位置
  393. {
  394.         if(y%2==0) odd=0;
  395.         else odd=1;
  396.         y=(y+1)/2;
  397.         switch (x) {
  398.         case 1:
  399.                 LCD_write_com(0X7F + y);
  400.                 break;
  401.         case 2:
  402.                 LCD_write_com(0X8F + y);
  403.                 break;
  404.         case 3:
  405.                 LCD_write_com(0X87 + y);
  406.                 break;
  407.         case 4:
  408.                 LCD_write_com(0X97 + y);
  409.                 break;
  410.         default:
  411.                 break;
  412.         }
  413. }

  414. void LCD_write_char(unsigned char x, unsigned char y,unsigned char flag, char data)
  415. {
  416.         LCD_set_addr(x, y);
  417.         if(odd==0)
  418.         {
  419.                 if(flag==1)
  420.                 {
  421.                         LCD_read_data();
  422.                         LCD_set_addr(x,y);
  423.                         LCD_write_data(data);
  424.                 }
  425.         }
  426.         LCD_write_data(data);
  427. }

  428. void LCD_write_string(unsigned char addr_x, unsigned char addr_y, char* str) {
  429.         unsigned char LCD_temp;
  430.         LCD_set_addr(addr_x, addr_y);
  431.         if(odd==0)
  432.         {
  433.                 LCD_read_data();
  434.                 LCD_set_addr(addr_x,addr_y);
  435.                 LCD_write_data(*str++);
  436.         }
  437.         LCD_temp = *str;
  438.         while (LCD_temp != 0x00) {
  439.                 LCD_write_data(LCD_temp);
  440.                 LCD_temp = *(++str);
  441.         }
  442. }

  443. void LCD_list_num(unsigned char x,unsigned char y,long number)
  444. {
  445.         unsigned char pos;
  446.         switch (x)
  447.         {
  448.                 case 1:
  449.                         x=0x7F;
  450.                         break;

  451.                 case 2:
  452.                         x=0x8F;
  453.                         break;

  454.                 case 3:
  455.                         x=0x87;
  456.                         break;

  457.                 case 4:
  458.                         x=0x97;
  459.                         break;
  460.         }
  461.         pos=x+y;
  462.         LCD_write_com(pos);
  463.         if(number<=-100000&&number>-1000000)
  464.         {
  465.                 LCD_write_data(0x30+(-number)/100000);
  466.                 LCD_write_data(0x30+((-number)/10000)%10);
  467.                 LCD_write_data(0x30+((-number)/1000)%10);
  468.                 LCD_write_data(0x30+((-number)/100)%10);
  469.                 LCD_write_data(0x30+((-number)/10)%10);
  470.                 LCD_write_data(0x30+(-number)%10);
  471.         }
  472.         if(number<=-10000&&number>-100000)
  473.         {
  474.                 LCD_write_data(0x30+(-number)/10000);
  475.                 LCD_write_data(0x30+((-number)/1000)%10);
  476.                 LCD_write_data(0x30+((-number)%1000)/100);
  477.                 LCD_write_data(0x30+((-number)%100)/10);
  478.                 LCD_write_data(0x30+(-number)%10);
  479.         }
  480.         if(number<=-1000&&number>-10000)
  481.         {
  482.                 LCD_write_data('-');
  483.                 LCD_write_data(0x30+(-number)/1000);
  484.                 LCD_write_data(0x30+((-number)/100)%10);
  485.                 LCD_write_data(0x30+((-number)%100)/10);
  486.                 LCD_write_data(0x30+(-number)%10);
  487.         }
  488.         if(number<=-100&&number>-1000)
  489.         {
  490.                 LCD_write_data('-');
  491.                 LCD_write_data(0x30+(-number)/100);
  492.                 LCD_write_data(0x30+((-number)/10)%10);
  493.                 LCD_write_data(0x30+(-number)%10);
  494.         }
  495.         if(number<=-10&&number>-100)
  496.         {
  497.                 LCD_write_data('-');
  498.                 LCD_write_data(0x30+(-number)/10);
  499.                 LCD_write_data(0x30+(-number)%10);
  500.         }
  501.         if(number<0&&number>-10)
  502.         {
  503.                 LCD_write_data('-');
  504.                 LCD_write_data(0x30+(-number)%10);
  505.         }
  506.         if(number>=0&&number<10)
  507.         {
  508.                 LCD_write_data(0x30+number%10);
  509.         }
  510.         if(number>=10&&number<100)
  511.         {
  512.                 LCD_write_data(0x30+number/10);
  513.                 LCD_write_data(0x30+number%10);
  514.         }
  515.         if(number>=100&&number<1000)
  516.         {
  517.                 LCD_write_data(0x30+number/100);
  518.                 LCD_write_data(0x30+(number/10)%10);
  519.                 LCD_write_data(0x30+number%10);
  520.         }
  521.         if(number>=1000&&number<10000)
  522.         {
  523.                 LCD_write_data(0x30+number/1000);
  524.                 LCD_write_data(0x30+(number/100)%10);
  525.                 LCD_write_data(0x30+(number%100)/10);
  526.                 LCD_write_data(0x30+number%10);
  527.         }
  528.         if(number>=10000&&number<100000)
  529.         {
  530.                 LCD_write_data(0x30+number/10000);
  531.                 LCD_write_data(0x30+(number/1000)%10);
  532.                 LCD_write_data(0x30+(number%1000)/100);
  533.                 LCD_write_data(0x30+(number%100)/10);
  534.                 LCD_write_data(0x30+number%10);
  535.         }
  536.         if(number>=100000&&number<1000000)
  537.         {
  538.                 LCD_write_data(0x30+number/100000);
  539.                 LCD_write_data(0x30+(number/10000)%10);
  540.                 LCD_write_data(0x30+(number/1000)%10);
  541.                 LCD_write_data(0x30+(number/100)%10);
  542.                 LCD_write_data(0x30+(number/10)%10);
  543.                 LCD_write_data(0x30+number%10);
  544.         }
  545.         if(number>=1000000&&number<10000000)
  546.         {
  547.                 LCD_write_data(0x30+number/1000000);
  548.                 LCD_write_data(0x30+(number/100000)%10);
  549.                 LCD_write_data(0x30+(number/10000)%10);
  550.                 LCD_write_data(0x30+(number/1000)%10);
  551.                 LCD_write_data(0x30+(number/100)%10);
  552.                 LCD_write_data(0x30+(number/10)%10);
  553.                 LCD_write_data(0x30+number%10);
  554.         }
  555. }

  556. void LCD_list_Decimal(unsigned char x,unsigned char y,double Decimal)
  557. {
  558.         unsigned char pos;
  559.         double Deci;
  560.         unsigned long num;
  561.         num=(unsigned long)Decimal;
  562.         Deci=Decimal-num;
  563.         switch (x)
  564.         {
  565.                 case 1:
  566.                         x=0x7F;
  567.                         break;

  568.                 case 2:
  569.                         x=0x8F;
  570.                         break;

  571.                 case 3:
  572.                         x=0x87;
  573.                         break;

  574.                 case 4:
  575.                         x=0x97;
  576.                         break;
  577.         }
  578.         pos=x+y;
  579.         LCD_write_com(pos);
  580.         if(Decimal>=0 && Decimal<1)
  581.         {
  582.                 LCD_write_data(0x30+0);
  583.                 LCD_write_data('.');
  584.                 LCD_write_data(0x30+(int)(Deci*10)%10);
  585.                 LCD_write_data(0x30+(int)(Deci*100)%10);
  586.                 LCD_write_data(0x30+(int)(Deci*1000)%10);
  587.                 LCD_write_data(0x30+(int)(Deci*10000)%10);
  588.                 LCD_write_data(0x30+(int)(Deci*100000)%10);
  589.         }
  590.         if(Decimal>=1 && Decimal<10)
  591.         {
  592.                 LCD_write_data(0x30+num%10);
  593.                 LCD_write_data('.');
  594.                 LCD_write_data(0x30+(int)(Deci*10)%10);
  595.                 LCD_write_data(0x30+(int)(Deci*100)%10);
  596.                 LCD_write_data(0x30+(int)(Deci*1000)%10);
  597.                 LCD_write_data(0x30+(int)(Deci*10000)%10);
  598.                 LCD_write_data(0x30+(int)(Deci*100000)%10);
  599.         }
  600.         if(Decimal>=10 && Decimal<100)
  601.         {
  602.                 LCD_write_data(0x30+num/10);
  603.                 LCD_write_data(0x30+num%10);
  604.                 LCD_write_data('.');
  605.                 LCD_write_data(0x30+(int)(Deci*10)%10);
  606.                 LCD_write_data(0x30+(int)(Deci*100)%10);
  607.                 LCD_write_data(0x30+(int)(Deci*1000)%10);
  608.                 LCD_write_data(0x30+(int)(Deci*10000)%10);
  609.                 LCD_write_data(0x30+(int)(Deci*100000)%10);
  610.         }
  611.         if(Decimal>=100 && Decimal<1000)
  612.         {
  613.                 LCD_write_data(0x30+num/100);
  614.                 LCD_write_data(0x30+num/10%10);
  615.                 LCD_write_data(0x30+num%10);
  616.                 LCD_write_data('.');
  617.                 LCD_write_data(0x30+(int)(Deci*10)%10);
  618.                 LCD_write_data(0x30+(int)(Deci*100)%10);
  619.                 LCD_write_data(0x30+(int)(Deci*1000)%10);
  620.                 LCD_write_data(0x30+(int)(Deci*10000)%10);
  621.                 LCD_write_data(0x30+(int)(Deci*100000)%10);
  622.         }
  623.         if(Decimal>=1000 && Decimal<10000)
  624.         {
  625.                 LCD_write_data(0x30+num/1000);
  626.                 LCD_write_data(0x30+num/100%10);
  627.                 LCD_write_data(0x30+num/10%10);
  628.                 LCD_write_data(0x30+num%10);
  629.                 LCD_write_data('.');
  630.                 LCD_write_data(0x30+(int)(Deci*10)%10);
  631.                 LCD_write_data(0x30+(int)(Deci*100)%10);
  632.                 LCD_write_data(0x30+(int)(Deci*1000)%10);
  633.                 LCD_write_data(0x30+(int)(Deci*10000)%10);
  634.                 LCD_write_data(0x30+(int)(Deci*100000)%10);
  635.         }
  636. }

  637. void LCD_init(void) {
  638.         P1DIR |= BIT6 + BIT7;
  639.         _delay_cycles(2000);
  640.         LCD_write_com(0x30); //一次送8位數(shù)據(jù)
  641.         LCD_write_com(0x0C); //整體顯示,游標(biāo)off,游標(biāo)位置off
  642.         LCD_write_com(0x01); //清DDRAM
  643.         LCD_write_com(0x02); //DDRAM地址歸位
  644.         LCD_write_com(0x80); //設(shè)定DDRAM 7位地址000,0000到地址計(jì)數(shù)器AC
  645. }

  646. void LCD_clear(void){
  647.         LCD_write_com(0x01);
  648. }

  649. /*-----LCD12864繪圖函數(shù)-------*/
  650. void GUI_clear()  //繪圖清屏函數(shù) (清屏指令在畫圖時(shí)不能使用)
  651. {
  652.         unsigned char i,j,k;
  653.         LCD_write_com(EXTEND_SET);//擴(kuò)展指令集,8位數(shù)據(jù)傳輸,繪圖開
  654.         LCD_write_com(DRAW_OFF);        //關(guān)閉繪圖顯示
  655.         for(i=0;i<2;i++)  //分上下兩屏寫
  656.         {
  657.                 for(j=0;j<32;j++)
  658.                 {
  659.                         LCD_write_com(0x80+j);        //寫y坐標(biāo)
  660.                         _delay_cycles(10);
  661.                         if(i==0)//寫x坐標(biāo)
  662.                         {
  663.                                 LCD_write_com(0x80);
  664.                                 _delay_cycles(100);
  665.                         }
  666.                         else
  667.                         {
  668.                                 LCD_write_com(0x88);
  669.                                 _delay_cycles(100);
  670.                         }
  671.                         for(k=0;k<16;k++)  //寫一整行數(shù)據(jù)
  672.                         {
  673.                                 LCD_write_data(0x00);  //寫高字節(jié)
  674.                                 LCD_write_data(0x00);  //寫低字節(jié)
  675.                                 _delay_cycles(100);
  676.                         }
  677.                 }
  678.         }
  679.         LCD_write_com(DRAW_ON);        //打開繪圖顯示
  680.         LCD_write_com(BASIC_SET);//打開基本指令集
  681. }

  682. void GUI_draw_full_picture(const unsigned char *dat)//畫滿屏圖片,橫向取模
  683. {
  684.            unsigned char i,j,k;
  685.            unsigned char GDRAMAddrX=0x80;
  686.            unsigned char GDRAMAddrY=0x80;
  687.            for(i=0;i<2;i++)
  688.            {
  689.                            for(j=0;j<32;j++)
  690.                         {
  691.                                 for(k=0;k<8;k++)
  692.                                 {
  693.                                         LCD_write_com(DRAW_OFF);
  694.                                         LCD_write_com(GDRAMAddrY+j);
  695.                                         LCD_write_com(GDRAMAddrX+k);
  696.                                         LCD_write_data(*dat++);
  697.                                         LCD_write_data(*dat++);
  698.                                 }
  699.                         }
  700.                         GDRAMAddrX=0x88;
  701.            }
  702.            LCD_write_com(DRAW_ON);
  703.            LCD_write_com(BASIC_SET);
  704. }

  705. /*
  706. void LCD_set_dot(unsigned char x,unsigned char y)//打點(diǎn)程序
  707. {
  708.          unsigned char x_byte,x_bit;  //確定在坐標(biāo)的那一字節(jié)哪一位
  709.          unsigned char y_byte,y_bit;  //確定在坐標(biāo)的哪一屏哪一行
  710.          unsigned char temph,templ;         //定義兩個(gè)臨時(shí)變量,用于存放讀出來(lái)的數(shù)據(jù)
  711.          LCD_write_com(EXTEND_SET);        //擴(kuò)展指令集
  712.          LCD_write_com(DRAW_OFF);//繪圖顯示關(guān)閉
  713.          x_byte=x/16;
  714.          x_bit=x%16;
  715.          y_byte=y/32;
  716.          y_bit=y%32;
  717.          LCD_write_com(EXTEND_SET);
  718.          LCD_write_com(0x80+y_bit);
  719.          LCD_write_com(0x80+x_byte+8*y_byte);
  720.          LCD_read_byte();
  721.          temph=LCD_read_byte();
  722.          templ=LCD_read_byte();
  723.          _delay_cycles(10);
  724.          LCD_write_com(0x80+y_bit);
  725.          LCD_write_com(0x80+x_byte+8*y_byte);
  726.          _delay_cycles(10);
  727.          if(x_bit<8)
  728.          {
  729.                  LCD_write_data(temph|(0x01<<(7-x_bit)));
  730.                 LCD_write_data(templ);
  731.          }
  732.          else
  733.          {
  734.                  LCD_write_data(temph);
  735.                 LCD_write_data(templ|(0x01<<(15-x_bit)));
  736.          }
  737.          LCD_write_com(DRAW_ON);
  738.          LCD_write_com(BASIC_SET);
  739. }
  740. */
復(fù)制代碼


Sound_positioning_system1_0.rar

39.16 KB, 下載次數(shù): 10, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
国产一区二区三区久久久久久久久 | 日韩三级在线| 亚洲字幕成人中文在线观看| 摸摸摸bbb毛毛毛片| 日本在线成人一区二区| www.xxxx欧美| 精品久久久精品| 国内成人免费视频| 亚洲人成网www| www在线观看黄色| jizz蜜桃视频在线观看| aaa一区二区三区| 免费成人深夜天涯网站| 欧美人成在线观看| 成人精品视频久久久久| 亚洲第一精品夜夜躁人人爽| 亚欧色一区w666天堂| 国产在线观看免费一区| 精品72久久久久中文字幕| 日韩另类在线| jlzzjlzz欧美| 天天综合网天天综合| 黄色录像二级片| xx欧美撒尿嘘撒尿xx| 日韩欧美视频第二区| 久久夜色撩人精品| 天天躁日日躁狠狠躁欧美| 日韩美女一级视频| 国产老女人av| 亚洲综合视频在线播放| 韩国女同性做爰三级| 妺妺窝人体色www看人体| 国产精品国语对白| 日韩电影大片中文字幕| 最新日韩在线视频| 国产一区二区三区在线看麻豆| 国产一区二区三区四区三区四 | 91精品国产高清久久久久久久久 | 国产日韩欧美视频在线| 亚洲成人精品在线| 亚洲第一主播视频| 2021国产精品久久精品| 在线亚洲观看| 激情婷婷综合| 91麻豆精品一二三区在线| 日本中文在线观看| av女片在线| 无码国产色欲xxxx视频| 中文字幕精品三级久久久| 一本色道久久综合亚洲精品图片| 欧美激情国产精品日韩| 亚洲在线视频一区二区| 91夜夜揉人人捏人人添红杏| 欧美疯狂xxxx大交乱88av| 精品国产乱码久久久久久浪潮| 亚洲成av人**亚洲成av**| 久久综合色一综合色88| 久久99蜜桃精品| 欧美午夜影院| 成人看的视频| 国产精品zjzjzj在线观看| 欧美黑人一区| 丁香花电影在线观看完整版| 日本一二三区在线视频| 成人网18免费软件大全| jizzjizz国产| 欧美女人天堂| 中国女人内谢69xxx视频| 又污又黄的网站| 国产精品成人av久久| 成人国产精品久久久久久亚洲| 国产一区二区三区18| 日韩精品在线一区二区| 欧美精品国产精品| 欧美影片第一页| 欧美视频专区一二在线观看| 亚洲日本护士毛茸茸| 久久久久久久久免费| 国产精品亚洲专一区二区三区| 久久一日本道色综合久久| 国产一区亚洲| 欧美午夜不卡影院在线观看完整版免费| 精品在线播放| 嫩草一区二区三区| 美女视频一区| 欧美成人三级| 国产午夜精品一区在线观看| 国产精品美女午夜爽爽| 成人免费网站www网站高清| 麻豆网站免费在线观看| 成年女人在线看片| 国产不卡人人| av日韩电影| 欧美大胆成人| 国产成人77亚洲精品www| 精品成人av| 青青久久精品| 97se亚洲| 亚洲福利天堂| 中日韩免视频上线全都免费| 日韩av资源网| 成人国产精品一级毛片视频| 91麻豆精品国产91久久久平台| 欧美丰满老妇| 欧美日韩国产一区精品一区| 国自产拍偷拍福利精品免费一 | 五月婷婷开心综合| 国产va在线| 污污网址在线观看| 北岛玲一区二区三区| 一区二区三区视频网站 | 国色天香2019中文字幕在线观看| 性欧美激情精品| 日韩**中文字幕毛片| 国产精品mp4| 91在线无精精品一区二区| 9a蜜桃久久久久久免费| 麻豆视频成人| 99re8这里只有精品| 免费高清一区二区三区| 日韩在线xxx| 日本少妇一区二区三区| 激情综合丁香五月| 人妻人人澡人人添人人爽| 国产性猛交╳xxx乱大交| 中文字幕一区二区在线视频| 欧美 中文字幕| 国产黄色免费看| 青草视频在线播放| 激情四房婷婷| 在线国产情侣| 美女毛片在线看| 天堂在线一二区| www国产在线观看| 日韩av一卡| 国产精品高潮久久| 欧美男男freegayvideosroom| 91久久夜色精品国产按摩| 久久男女视频| 久久久精品欧美丰满| 亚洲成av人片在线| 日韩欧美成人一区| 欧美大片在线看| 成人国产精品色哟哟| 亚洲开发第一视频在线播放| 免费av网址在线| 免费中文字幕av| 麻豆精品久久久久久久99蜜桃| 黄色av小说在线观看| 日日操夜夜爽| 国产高清一区在线观看| 热色播在线视频| 在线观看欧美理论a影院| 免费一级欧美片在线播放| 91美女精品福利| 在线观看91视频| 色多多国产成人永久免费网站| 国产有码一区二区| 国产麻豆电影在线观看| 99久久激情视频| 影音先锋男人资源在线观看| 国产熟女精品视频| 免费黄漫在线观看| 91精品国产综合久久久久久豆腐| 国产成人精选| 国内精品久久久久久久影视蜜臀| 成人av网站免费观看| 欧美午夜精品久久久久久久| 亚洲天堂av女优| 国产精品jizz视频| 国产精品区在线| 日本少妇在线观看| 国内精品免费视频精选在线观看| 日韩a在线观看| 只有精品亚洲| 老司机免费视频久久| 亚洲伦理在线精品| 亚洲色在线视频| 91亚洲一区精品| 99久久激情视频| 精品在线视频观看| 国产原创在线视频| 美女黄视频在线观看| 日本国产精品| 国产美女在线精品| 欧美日韩久久久久久| 91av福利视频| 岛国大片在线播放| 老女人性淫交视频| 九九热爱视频精品视频高清| 欧美日韩视频精品二区| 成人在线视频你懂的| 免费人成网站在线观看欧美高清| 亚洲成人资源网| 欧美激情免费在线| 2022中文字幕| 久久久久99精品成人片试看| 精品无线一线二线三线| av免费在线网站| 自拍偷拍欧美专区| 中文字幕一区二| 色婷婷久久一区二区| 日本一区二区不卡高清更新| 麻豆精品国产传媒av| 国内老熟妇对白xxxxhd| 最新在线你懂的| 国产美女撒尿一区二区| 国产suv一区二区三区88区| 日韩一区二区三区免费观看| 国产男人精品视频| 亚洲免费黄色录像| 国产三级在线观看视频| 色视频在线看| 青草国产精品| 亚洲激情五月婷婷| 国内精品美女av在线播放| 日韩精品xxxx| 中文字幕日韩国产| 婷婷婷国产在线视频| 国产乱码精品一区二区三区四区 | 北条麻妃一区二区三区中文字幕 | 久久久久99精品成人| 欧洲精品乱码久久久久蜜桃| 蜜乳av一区| 欧美综合二区| 欧美日韩在线免费视频| 成人字幕网zmw| 在线xxxxx| 欧美一级欧美三级在线| av男人的天堂在线观看| 免费在线观看成人av| 欧美在线一二三| 97免费资源站| 中文字幕有码在线播放| 天堂免费视频| 精品一区91| 中文字幕av一区二区三区| 欧美成人合集magnet| 日本黄网站免费| 丁香六月天婷婷| 日本精品600av| 久久精品国产亚洲高清剧情介绍| 欧美va在线播放| 亚洲综合第一| 黄色av网站免费| caoporn国产精品免费视频| 欧美日韩网站| 欧美一卡2卡3卡4卡| 欧美日韩亚洲在线| 国产a∨精品一区二区三区仙踪林| 精品全国在线一区二区| 亚洲ww精品| 成人免费三级在线| 欧美另类极品videosbest最新版本 | 久草在线网址| 99精品视频免费全部在线| 日韩午夜激情av| 亚洲小视频在线播放| 中文字幕一区2区3区| 黄色在线播放网站| 蜜臀精品久久久久久蜜臀| 日韩成人中文字幕在线观看| wwwjizzjizzcom| 国产黄色美女视频| 久久夜夜操妹子| 国产日韩精品一区二区三区在线| 欧美一区第一页| 成人午夜剧场视频网站| free性亚洲| 欧美fxxxxxx另类| 精品乱人伦小说| 久久99中文字幕| 天天射,天天干| 自拍偷拍亚洲| 亚洲手机成人高清视频| 欧美在线性视频| 亚洲av综合一区二区| 69ww免费视频播放器| 久久久久久久久久久9不雅视频| 欧美综合视频在线观看| 欧美不卡在线一区二区三区| 在线能看的av| a√中文在线观看| 国产亚洲综合性久久久影院| 国产精品自拍网| 国产无遮挡aaa片爽爽| 黄a在线观看| 成人精品鲁一区一区二区| 欧美一区二区三区免费观看| av中文字幕免费观看| 在线观看理论片| 青青草伊人久久| 韩国v欧美v日本v亚洲| 国产精品揄拍100视频| 国产在线导航| 美女任你摸久久| 97超碰色婷婷| 情侣偷拍对白清晰饥渴难耐| 国产精品麻豆一区二区三区| 国产曰批免费观看久久久| 久久久噜噜噜久久久| 国产精品情侣呻吟对白视频| 天堂av网在线| 日韩专区欧美专区| 97香蕉久久夜色精品国产| 午夜国产福利视频| 91.xxx.高清在线| 2017欧美狠狠色| 成人av影视在线| 国产女人18毛片水真多| 玖玖玖视频精品| 欧美日韩精品一区视频| www.日本xxxx| 国产剧情演绎av| 久久99精品视频| 国产精品久久国产精品99gif| 国产网址在线观看| 自拍网站在线观看| 亚洲动漫第一页| 黄页网站在线观看视频| 九色视频在线观看| 日韩影院在线观看| 国产精品白嫩美女在线观看| 国产精品男女视频| 四虎影视精品永久在线观看| 欧美日韩一区二区欧美激情| 成年人视频在线免费| 天天舔天天干| 国产乱码精品一品二品| 亚洲free性xxxx护士白浆| 国产精品伊人久久| 精品剧情v国产在线观看| 国产一区二区三区不卡在线观看 | 色中色777| 国产精品一区二区在线观看不卡| 国产在线日韩在线| www.污视频| 欧美一区二区麻豆红桃视频| 日韩成人激情视频| 美女露出粉嫩尿囗让男人桶| 中文字幕第5页| caoporen国产精品视频| 国产91一区二区三区| 亚洲AV第二区国产精品| 国产精品99视频| 欧美精品videossex88| 国产成人在线观看网站| 欧美一区一区| 亚洲欧美在线磁力| 中国一级片在线观看| 日韩三区免费| 精品日本一线二线三线不卡| 国产女同无遮挡互慰高潮91| 日本簧片在线观看| 日韩精品一区第一页| 欧洲亚洲妇女av| 天堂av免费在线观看| 免费一级欧美片在线观看网站| 91麻豆精品国产| 亚洲av无码一区二区三区人| 黄视频免费在线看| 小说区图片区亚洲| 欧美精品一区二区在线播放| 中文国语毛片高清视频| 91视频亚洲| 亚洲欧美激情在线视频| 亚洲 欧美 变态 另类 综合| 亚洲精品**中文毛片| 91精品国产欧美日韩| 亚洲天堂美女视频| 制服丝袜中文字幕在线| 欧美性xxxxxx| 日本美女视频一区| 男人影院在线观看| 午夜精品成人在线| 欧美午夜aaaaaa免费视频| 中文字幕第12页| 亚洲成av人片www| 国产女主播在线播放| 在线视频超级| 亚洲精品资源美女情侣酒店 | 亚洲一区二区四区| 国产一二三视频| 亚洲免费电影在线| 免费黄色a级片| 欧美影视资讯| 在线观看亚洲区| 亚洲自拍偷拍另类| 尤物精品在线| 美日韩精品免费| 国产视频一二区| 亚洲v中文字幕| 女人被狂躁c到高潮| 丁香婷婷久久| 久久电影一区二区| xxxx国产精品| 久久国产日韩欧美精品| 国产精品88久久久久久妇女| 在线观看午夜看亚太视频| 狠狠爱在线视频一区|