久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5951|回復: 4
打印 上一主題 下一主題
收起左側

基于TFT彩屏的數字示波器單片機部分代碼(TFT的單片機驅動)

[復制鏈接]
跳轉到指定樓層
樓主

給大家發次程序的目的是在于,便于大家學習用51大家來驅動TFT2.4彩屏

流程是由觸發電路檢測周期,fpga數周期和采樣,數據發給單片機。單片機通過周期和數據確定橫縱坐標,在tft上顯示。



下載:
基于tft彩屏的數字示波器單片機編程部分.rar (9.48 KB, 下載次數: 50)


單片機源程序:
  1. #include"head.h"
  2. #include"intrins.h"

  3. sbit key1=P3^2;        //水平掃描檔
  4. sbit key2=P3^3;
  5. sbit key3=P3^4;

  6. sbit key4=P3^5;        //豎直檔
  7. sbit key5=P3^6;
  8. sbit key6=P3^7; //延遲

  9. uchar sdiv=1;//默認豎直檔
  10. float hdiv=0.000002;//默認水平掃描檔
  11. char xdata y[128]; //存放fpga給的每周期128個點           
  12. uint i=0;
  13. float T;//周期
  14. float fu=0;//幅值

  15. sbit clk=P2^0;//單片機給fpga的時鐘
  16. sbit start=P2^2;//單片機給fpga的標志位
  17. uchar time[3];//存放的fpga給的周期信息
  18. long int t_long;//由周期信息移位得到的周期數(只是個數,需要轉化)
  19. long int freq;//頻率



  20. void receive()//單片機與fpga通訊部分,每次fpga發給單片機131個點,前3個點是和周期有關的信息,后128個點是每周期波形的數據點
  21. {
  22.   uchar time[3];
  23.   uchar i;
  24.   start=1;
  25.   _nop_();
  26.   _nop_();
  27.   _nop_();
  28.   _nop_();
  29.   _nop_();
  30.   _nop_();
  31.   _nop_();
  32.   _nop_();
  33.   _nop_();
  34.   _nop_();
  35.   _nop_();
  36.   _nop_();

  37.    for(i=0;i<3;i++)
  38.     {
  39.           clk=1;
  40.           delayms(10);
  41.           _nop_();
  42.           _nop_();

  43.        
  44.           clk=0;                //clk下降沿fpga發數據
  45.           _nop_();
  46.           _nop_();

  47.           clk=1;

  48.           time[i]=P1;        //高電平單片機收數據
  49.         }
  50.         t_long=((long int)time[2]*256*256+(int)time[1]*256+time[0])*2;//移位得到周期的數數

  51.    for(i=0;i<128;i++)
  52.     {
  53.           clk=1;
  54.           _nop_();
  55.           _nop_();
  56.        
  57.           clk=0;
  58.           _nop_();
  59.           _nop_();
  60.           clk=1;
  61.        
  62.           if((uchar)P1<128)          //對AD而言128相當于0,所以相當于判斷正負
  63.           y[i]=(uchar)P1+128;
  64.           else
  65.           y[i]=(uchar)P1-128;


  66.         if(y[i]>fu)
  67.                 fu=y[i];  //接受最大值
  68.         }

  69.         _nop_();
  70.         _nop_();


  71.       start=0;
  72.           clk=1;
  73.           _nop_();
  74.           _nop_();
  75.        
  76.           clk=0;
  77.           _nop_();
  78.           _nop_();
  79.           clk=1;
  80.                           
  81. }




  82. void keyscan()//檢測按鍵改變div
  83. {
  84.         if(key1==0)
  85.         {
  86.                 delayms(10);
  87.                 if(key1==0)
  88.                 {
  89.                         hdiv=0.0000001;
  90.                         ClearScreen(0xffff);
  91.                         table();
  92.                 }
  93.                 while(!key1);
  94.         }

  95.         if(key2==0)
  96.         {
  97.                 delayms(10);
  98.                 if(key2==0)
  99.                 {                                                                  
  100.                         hdiv=0.000002;
  101.                         ClearScreen(0xffff);
  102.                         table();
  103.                 }
  104.                 while(!key2);
  105.         }

  106.         if(key3==0)
  107.         {
  108.                 delayms(10);
  109.                 if(key3==0)
  110.                 {
  111.                         hdiv=0.02;
  112.                         ClearScreen(0xffff);
  113.                         table();
  114.                 }
  115.                 while(!key3);
  116.         }

  117.         if(key4==0)
  118.         {
  119.                 delayms(10);
  120.                 if(key4==0)
  121.                 {
  122.                         sdiv=1;
  123.                         ClearScreen(0xffff);
  124.                         table();
  125.                 }
  126.                 while(!key4);
  127.         }

  128.         if(key5==0)
  129.         {
  130.                 delayms(10);
  131.                 if(key5==0)
  132.                 {
  133.                         sdiv=5;
  134.                         ClearScreen(0xffff);
  135.                         table();
  136.                 }
  137.                 while(!key5);
  138.         }
  139. }
  140.        
  141. void  main(void)
  142. {   
  143.         clk=1;
  144.         start=0;
  145.         ILI9325_Initial();//tft初始化

  146.         while(1)//循環,每次都是先收到數據,然后顯示
  147.                 {
  148.                         ClearScreen(0xffff);//清屏
  149.                         table();//坐標
  150.                         fu=0;
  151.                         receive();
  152.                         fu=fu*5/128;
  153.                         freq=(long int)200000000/t_long;
  154.                         T=1.0/freq;
  155.                         keyscan();

  156.                        //畫圖函數
  157.                     for(i=0;i<320;i++)        //i代表像素點位置,(T/hdiv*32)指的是顯示一個周期至少需要的像素點
  158.                         {
  159.                             if(i==320) break;
  160.                                 LCD_SetPos(120+sdiv*y[(uint)(i%(uint)(T/hdiv*32)*127/(T/hdiv*32-1))],120+sdiv*y[(uint)(i%(uint)(T/hdiv*32)*127/(T/hdiv*32))-1],i,i);
  161.                                 Write_Data_U16(0xf800);

  162.                     }
  163.                         LCD_PutString(30,20,"峰值:",0x001f,0xffff);
  164.                         LCD_PutChar8x16( 30, 56, (uchar)(fu*10)/10+48, 0x001f, 0xffff);
  165.                         LCD_PutChar8x16( 30, 62, '.', 0x001f, 0xffff);
  166.                         LCD_PutChar8x16( 30, 68, (uchar)(fu*10)%10+48, 0x001f, 0xffff);
  167.                         LCD_PutChar8x16( 30, 74, 'V', 0x001f, 0xffff);

  168.                         LCD_PutString(30,130,"頻率:",0x001f,0xffff);
  169.                         if(freq<1000){
  170.                                 LCD_PutChar8x16(30,166,(int)freq/100+48,0x001f,0xffff);
  171.                             LCD_PutChar8x16(30,172,(int)freq/10%10+48,0x001f,0xffff);
  172.                                 LCD_PutChar8x16(30,178,(int)freq%10+48,0x001f,0xffff);
  173.                                 LCD_PutString(30,184,"Hz",0x001f,0xffff);
  174.                                 }
  175.                         if(freq>=1000 && freq/1000<1000){
  176.                                 LCD_PutChar8x16(30,166,(int)(freq/1000/100)+48,0x001f,0xffff);
  177.                             LCD_PutChar8x16(30,172,(int)(freq/1000/10%10)+48,0x001f,0xffff);
  178.                                 LCD_PutChar8x16(30,178,(int)(freq/1000)%10+48,0x001f,0xffff);
  179.                                 LCD_PutString(30,184,"KHz",0x001f,0xffff);
  180.                                 }
  181.                         if(freq>=1000000 && freq/1000000<1000){
  182.                                 LCD_PutChar8x16(30,166,(int)(freq/1000000/100)+48,0x001f,0xffff);
  183.                             LCD_PutChar8x16(30,172,(int)(freq/1000000/10%10)+48,0x001f,0xffff);
  184.                                 LCD_PutChar8x16(30,178,(int)(freq/1000000%10)+48,0x001f,0xffff);
  185.                                 LCD_PutString(30,184,"MHz",0x001f,0xffff);
  186.                                 }                       
  187.                         LCD_PutString(30,220,"周期:",0x001f,0xffff);
  188.                         if(T>=1){       
  189.                                 LCD_PutChar8x16(30,256,(int)T+48,0x001f,0xffff);
  190.                                 LCD_PutString(30,262,"s",0x001f,0xffff);
  191.                                 }
  192.                         if(T<1 && 1000*T>=1){
  193.                                 LCD_PutChar8x16(30,256,(int)(1000*T)/100+48,0x001f,0xffff);
  194.                                 LCD_PutChar8x16(30,262,(int)(1000*T)/10%10+48,0x001f,0xffff);
  195.                                 LCD_PutChar8x16(30,268,(int)(1000*T)%10+48,0x001f,0xffff);
  196.                             LCD_PutString(30,274,"ms",0x001f,0xffff);
  197.                                 }
  198.                         if(1000*T<1 && 1000000*T>=1){
  199.                                 LCD_PutChar8x16(30,256,(int)(1000000*T)/100+48,0x001f,0xffff);
  200.                                 LCD_PutChar8x16(30,262,(int)(1000000*T)/10%10+48,0x001f,0xffff);
  201.                                 LCD_PutChar8x16(30,268,(int)(1000000*T)%10+48,0x001f,0xffff);
  202.                             LCD_PutString(30,274,"us",0x001f,0xffff);
  203.                                 }

  204.                        
  205.                         //是否延遲
  206.                         if(key6==0)
  207.                       {
  208.                                 delayms(10);
  209.                                 if(key6==0)
  210.                                 delayms(10000);
  211.                                 while(!key1);
  212.                         }       

  213.                 }

  214. }
復制代碼



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

使用道具 舉報

沙發
ID:140725 發表于 2017-3-22 03:56 | 只看該作者
好資料,51黑有你更精彩
回復

使用道具 舉報

板凳
ID:149167 發表于 2017-3-22 08:40 | 只看該作者
51黑有你真精彩
回復

使用道具 舉報

地板
ID:302712 發表于 2018-4-19 11:29 | 只看該作者
不錯的好資料,謝謝分享
回復

使用道具 舉報

5#
ID:443340 發表于 2018-12-10 15:21 | 只看該作者
振羨慕你那么厲害
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看涩涩视频 | 麻豆hd| 福利社午夜影院 | 永久免费av| 成人精品视频在线观看 | 中文字幕在线剧情 | 午夜精品久久久久久久久久久久 | av一级一片| 国产综合久久 | 成人黄色网址大全 | 91高清视频 | 中文字幕一区二区三 | 久久久国产一区二区三区 | 亚洲综合无码一区二区 | 91九色porny首页最多播放 | 天天操天天射天天舔 | 一区二区三区国产精品 | 精品国产一区二区三区性色av | 亚洲成a人片 | 激情欧美一区二区三区中文字幕 | 欧美自拍一区 | 亚洲综合在线播放 | 一区二区电影网 | 国产精品日韩欧美一区二区三区 | av在线二区 | 国产精品视频一区二区三 | 在线成人精品视频 | 午夜影院在线观看免费 | 国产精品视频一 | 在线观看亚洲 | 色姑娘av | 色视频一区二区 | 欧产日产国产精品99 | 99热这里都是精品 | 免费成人午夜 | 久久久久久av | 麻豆久久久久久 | 免费观看av | 天天爽夜夜骑 | 成人在线观看亚洲 | 久草久草久草 |