stc8g1k08a是深圳宏晶科技的一款8腳8位兼容51系列的單片機 價格很便宜 但麻雀雖小五臟俱全 且速度還挺快下面就是用它做的小東東 精度不是很高 本人也是剛入門 水平有限 希望大家多多指教共兩個按鍵 :按住周期和啟動按鍵5秒鐘后兩個程序互相切換 短按示波器是切換掃描周期 超聲波測距是啟動按鍵 波形鎖定是示波器波形固定用的
制作出來的實物圖如下:
51hei圖片_20210422143655.jpg (130.46 KB, 下載次數: 135)
下載附件
2021-4-22 15:19 上傳
51hei圖片_20210422143700.jpg (132.29 KB, 下載次數: 110)
下載附件
2021-4-22 15:19 上傳
51hei圖片_20210422143705.jpg (129.98 KB, 下載次數: 130)
下載附件
2021-4-22 15:19 上傳
51hei圖片_20210422143632.jpg (131.57 KB, 下載次數: 116)
下載附件
2021-4-22 15:19 上傳
電路原理圖如下:
51hei圖片_20210422143642.jpg (222.34 KB, 下載次數: 119)
下載附件
2021-4-22 15:19 上傳
單片機源程序如下:
- #include "reg51.h"
- #include "intrins.h"
- #include"main.h"
- #include<math.h>
-
- unsigned char xdata se[128];//把AD轉換后的臨時數據存于該數組
- unsigned char code sm[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//用于顯示一列中的一點
- unsigned int code time[9]={1,40,100,500,1000,2600,5250,10000,25000};
- unsigned int code time1[9]={1,3,5,20,40,100,200,400,1000};
- unsigned char xdata timd[5];
- unsigned char xdata ju_li[5];
- unsigned char p,z=0;
- unsigned int i=0,q=0;
- unsigned int m=5;
- //unsigned double q;
- sbit k1=P3^1;
- sbit trig=P3^3;
- sbit echo=P3^2;
- void delay_us(unsigned int i)
- {
- while(i)
- {
- unsigned char a;
- for(a=5;a>0;a--);
- i--;
- }
-
- }
- void delay100ms(unsigned int i) //誤差 -0.000000000025us
- {
- while(i)
- {
- unsigned char a,b,c;
- for(c=106;c>0;c--)
- for(b=197;b>0;b--)
- for(a=38;a>0;a--);
- _nop_(); //if Keil,require use intrins.h
- i--;
- }
- }
- void main()
- {
- P0M1 = 0; P0M0 = 0; //設置為準雙向口
- P1M1 = 0; P1M0 = 0; //設置為準雙向口
- P2M1 = 0; P2M0 = 0; //設置為準雙向口
- P3M1 = 0; P3M0 = 0; //設置為準雙向口
- P4M1 = 0; P4M0 = 0; //設置為準雙向口
- P5M1 = 0; P5M0 = 0; //設置為準雙向口
- /* P_SW2 = 0x80; //特殊寄存器允許位(0x80)
- CKSEL = 0x00; //選擇內部 IRC ( 默認 )
- CLKDIV = 0x03; //時鐘 3分頻
- P_SW2 = 0x00;
- */
- ad_init(); //ad轉換初始化
- OLED_Init(); //OLED初始化
-
- for(z=0;z<128;z++) // 起 顯示啟動示波器文字
- {
- for(i=0;i<8;i++) //清屏
- {
- OLED_WrCmd(0xb0+i);
- OLED_WrCmd(0x00+(z%16));
- OLED_WrCmd(0x10+z/16);
- OLED_WrDat(0x00);
- }
- }
- for (i=0;i<8;i++)
- {
- OLED_P16x16Ch(i*16,i/8*2+2,i);
- }
- delay100ms(30);
- for(z=0;z<128;z++)
- {
- for(i=0;i<8;i++) //清屏
- {
- OLED_WrCmd(0xb0+i);
- OLED_WrCmd(0x00+(z%16));
- OLED_WrCmd(0x10+z/16);
- OLED_WrDat(0x00);
- }
- } //止
- while(1)
- {
- if(k1==0)
- {
- i=0;
- m++;
- while(!k1)
- {
-
- delay100ms(1);
- i++;
-
- if(i>50)
- goto bosh;
-
- }
-
- if(m>8)
- {
- m=0;
- }
- //i++;
- }
- //*******************AD轉換將臨時數據存于數組se[] ****************************************
- for(i=0;i<128;i++)
- {
- se[i]=56-ad_dat()/18;
- delay(time[m]);
- }
- timd[0]=time1[m]%10;
- timd[1]=time1[m]/10%10;
- timd[2]=time1[m]/100%10;
- timd[3]=time1[m]/1000%10;
- timd[4]=time1[m]/10000%10;
- OLED_P6x8Str(10,7,"Time = ");
- OLED_P6x8Str(10+70,7," ms");
-
- for(i=0;i<5;i++) //顯示掃描周期每一位 共五位
- {
- oled_6x8((10+40)+6*i,7,timd[4-i]+16);
- }
-
- //**********************oled顯示****************************
- /* for(i=0;i<7;i++)
-
- {
- OLED_WrCmd(0xb0+i);
- OLED_WrCmd(0x00+(z%16));
- OLED_WrCmd(0x10+z/16);
- OLED_WrDat(0x00);
- }
-
- */
-
- for(z=0;z<128;z++)
- {
-
- for(i=0;i<7;i++)
-
- {
- OLED_WrCmd(0xb0+i);
- OLED_WrCmd(0x00+(z%16));
- OLED_WrCmd(0x10+z/16);
- if((i==3)&&(z%4==0))
- OLED_WrDat(0x10);
- else if(z==63)
- OLED_WrDat(0x44);
- else
- OLED_WrDat(0x00);
- }
- OLED_WrCmd(0xb0+se[z]/7);
- OLED_WrCmd(0x00+(z%16));
- OLED_WrCmd(0x10+z/16);
- OLED_WrDat(sm[se[z]%7]);
-
-
- // OLED_WrDat(0x00);
-
- }
-
- if(trig==0)
- {
- delay100ms(10);
- while(trig);
- while(!trig);
-
- }
-
- }
-
-
- //啟動超聲波測距程序。。。。。。
- bosh:
- for(z=0;z<128;z++)
- {
- for(i=0;i<8;i++) //清屏
- {
- OLED_WrCmd(0xb0+i);
- OLED_WrCmd(0x00+(z%16));
- OLED_WrCmd(0x10+z/16);
- OLED_WrDat(0x00);
- }
- }
- for (i=0;i<8;i++)
- {
- OLED_P16x16Ch(i*16,i/8*2+2,i+8);
- }
-
-
- delay100ms(30);
- for(z=0;z<128;z++)
- {
- for(i=0;i<8;i++) //清屏
- {
- OLED_WrCmd(0xb0+i);
- OLED_WrCmd(0x00+(z%16));
- OLED_WrCmd(0x10+z/16);
- OLED_WrDat(0x00);
- }
- }
-
- while(1)
- {
- if(k1==0)
- {
- q=0;
- trig=0;
- delay_us(1000);
- trig=1;
-
- i=10;
- while(!echo)
- {
- delay_us(1);
- i--;
- i=0;
- }
- while(echo)
- {
- delay_us(1);
- q++;
- }
- q=q*0.21;
-
-
- while(!k1)
- {
- i++;
- delay100ms(1);
-
- if(i>50)
- return;
- }
-
-
-
- }
- //q=156;
- ju_li[0]=q%10;
- ju_li[1]=q/10%10;
- ju_li[2]=q/100%10;
- ju_li[3]=q/1000%10;
- ju_li[4]=q/10000%10;
- for(i=0;i<5;i++)
- {
- oled1_8x16( 48+8*i,4,ju_li[4-i]);
- }
- for (i=0;i<6;i++)
- {
- OLED_P16x16Ch(i*16,i/8*2,19+i);
- }
- for (i=0;i<3;i++)
- {
- OLED_P16x16Ch(i*16,i/8*2+2+2,19+6+i);
- }
- for (i=0;i<2;i++)
- {
- OLED_P16x16Ch(95+i*16,i/8*2+2+2,19+6+3+i);
- }
-
- }
- }
復制代碼
51hei.png (5.9 KB, 下載次數: 113)
下載附件
2021-4-22 17:58 上傳
所有資料51hei提供下載:
ad_led.rar
(66.39 KB, 下載次數: 224)
2021-4-22 15:20 上傳
點擊文件名下載附件
c語言程序 下載積分: 黑幣 -5
|