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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1362|回復: 1
收起左側

單片機應力測試儀程序

[復制鏈接]
ID:569130 發表于 2020-4-23 15:52 | 顯示全部樓層 |閱讀模式
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define ad0_7 P0    //AD轉換數字量輸出
  6. void disp(uchar);
  7. void dig_trans(uchar);
  8. void RTL_C();
  9. void long_delay(void);   //長延時約120us
  10. void short_delay(void);   //短延時約8us
  11. void delay10ms(uchar);    //延時10ms
  12. void longdelay(uint time);
  13. //************7279子程序聲明*******
  14. void init_7279(void);
  15. void write7279(uchar cmd,uchar dta);  //寫入到HD7279
  16. uchar read7279(uchar);        //從HD7279讀出
  17. void send_byte(uchar);        //發送一個字節
  18. uchar receive_byte(void);     //接受一個字節
  19. //************AD轉換子程序聲明******
  20. void start_ad(void);
  21. read_ad();
  22. avr_read_ad();
  23. uchar digit[4];
  24. uchar key_number,j,k;
  25. uint tmr;
  26. unsigned long wait_cnter;

  27. //*************語音轉換子程序*******
  28. void SC_Speech(uchar cm);
  29. void SC_WBusy(void);
  30. void SC_Speechs(void);
  31. void init_SC(void);  //sc1010初始化

  32. sbit SC_RST=P3^0;   //脈沖復位
  33. sbit SC_DATA=P3^1;   //脈沖數據
  34. sbit SC_BUSY=P3^2;   //放音busy
  35. uint sp[8];     //組合語音數組變量

  36. sbit AD_CS=P1^0;//芯片選擇信號,控制芯片的啟動和結果讀取,低電平有效
  37. sbit AD_CLK=P1^1;//讀數據控制,低電平有效
  38. sbit AD_DI=P1^2;//AD轉換啟動控制,上升沿有效
  39. sbit AD_DO=P1^3;//AD轉換結束輸出低電平

  40. sbit cs=P2^0;//7279片選
  41. sbit clk=P2^1;
  42. sbit dat=P2^2;
  43. sbit key=P2^3;
  44. sbit buzzer=P2^7;


  45. //*****  HD7279 指令  *****
  46. #define CMD_RESET 0xa4      
  47. #define CMD_TEST 0xbf       //測試
  48. #define DECODE0 0x80       //譯碼方式
  49. #define DECODE1 0xc8       //譯碼方式
  50. #define CMD_READ 0x15      //讀
  51. #define UNDECODE 0x90      //譯碼方式:不譯碼
  52. #define RTL_CYCLE 0xa3     //循環左移
  53. #define RTR_CYCLE 0xa2     //循環右移
  54. #define RTL_UNCYL 0xa1     //左移
  55. #define RTR_UNCYL 0xa0    //右移
  56. #define ACTCTL 0x98      //消影
  57. #define SEGON 0xe0      //段亮
  58. #define SEGOFF 0xc0     //段滅
  59. #define BLINKCTL 0x88   //閃爍
  60. void main(){

  61.     //init_SC();
  62.           init_7279();
  63. buzzer=1;
  64.         while(1){
  65.                 //for(tmr=0;tmr<0x2000;tmr++);//上電延時
  66.                 //send_byte(CMD_RESET);

  67.                 //start_ad();//啟動AD
  68.    // long_delay();
  69.         
  70.                

  71.                 disp(avr_read_ad());
  72.                 //SC_Speechs();
  73.           delay10ms(200);
  74.         }
  75. }

  76. /*
  77. //***********啟動AD轉換子程序*********
  78. void start_ad(void){
  79.         ad_cs=0;//允許進行AD轉換
  80.         ad_wr=0;
  81.         _nop_();
  82.         ad_wr=1;//WR由低變高時,AD開始轉換
  83.         while(ad_intr);
  84.         ad_cs=1;//停止AD轉換
  85. }
  86. //************讀AD數據子程序**********
  87. read_ad(){
  88.         uchar ad_data;
  89.         ad0_7=0xff;
  90.         ad_cs=0;//允許讀
  91.         ad_rd=0;//讀取轉換數據結果
  92.         _nop_();
  93.         ad_data=ad0_7;//把數據存到ad_data中
  94.         ad_rd=1;
  95.         ad_cs=1;//停止AD讀取
  96.         return(ad_data);
  97. }*/
  98. int adc_0832()
  99. {
  100. uint tmp=0;
  101.   uint a,b;
  102.         AD_CS=0;
  103.         AD_CLK=0;
  104.         AD_DI=1;
  105.         _nop_();
  106.         _nop_();
  107.         AD_CLK=1;
  108.         _nop_();
  109.         _nop_();
  110.         AD_CLK=0;
  111.         AD_DI=1;
  112.         _nop_();
  113.         _nop_();
  114.         AD_CLK=1;
  115.         _nop_();
  116.         _nop_();
  117.         AD_CLK=0;
  118.         AD_DI=0;
  119.         _nop_();
  120.         _nop_();
  121.         AD_CLK=1;
  122.         _nop_();
  123.         _nop_();
  124.         AD_CLK=0;
  125.         _nop_();
  126.         _nop_();
  127.         
  128.         for(a=0;a<8;a++)
  129.         
  130.         {
  131.                 AD_CLK=1;
  132.                 _nop_();
  133.                 _nop_();
  134.                 AD_CLK=0;
  135.                 _nop_();
  136.                 _nop_();
  137.                 tmp|=AD_DO;
  138.                 if(a<7)
  139.                         tmp<<=1;
  140.         }
  141.         for(b=0;b<8;b++)
  142.         {
  143.                 AD_CLK=1;
  144.                 _nop_();
  145.                 _nop_();
  146.                 AD_CLK=0;
  147.                 _nop_();
  148.                 _nop_();
  149.         }
  150.         AD_CS=1;
  151.         return tmp;
  152. }



  153. //************AD轉換8次取平均**********
  154. avr_read_ad(){
  155.         uint i;
  156.         uint average,max,min,sum;
  157.         uint array[8];
  158.         sum=0;
  159.         for(i=0;i<8;i++){
  160.                 //start_ad();
  161.                 array[i]=adc_0832();
  162.         }
  163.                
  164.         max=array[0];
  165.         min=array[0];
  166.         for(i=0;i<8;i++){
  167.                 if(max<array[i])
  168.                         max=array[i];
  169.                 if(min>array[i])
  170.                         min=array[i];
  171.                 sum=sum+array[i];
  172.         }
  173.         average=(sum-max-min)/6;
  174.         return average;
  175. }

  176. //********顯示***********
  177. void disp(uchar ad_data){
  178.                 uint a;

  179.         
  180.         digit[3]=(ad_data-0x08)*400/51%10;
  181.         digit[2]=(ad_data-0x08)*40/51%10;
  182.         digit[1]=(ad_data-0x08)*40/51%100/10;
  183.         digit[0]=(ad_data-0x08)*40/51/100;  //百位


  184.         /*if(ad_data=0xe6)        
  185.                 xshu=0x00;
  186.         
  187.         */
  188.         buzzer=1;
  189.         
  190. if((ad_data-0x06)>=0xff){
  191.                 digit[1]=0x00;
  192.                 digit[2]=0x00;
  193.                 digit[3]=0x00;


  194.         }        
  195. if(ad_data>=0x7f){
  196.         for(a=0;a<5;a++){
  197.                 buzzer=0;
  198.         longdelay(250);
  199.         buzzer=1;
  200.         longdelay(150);
  201.         }
  202.         }        
  203.         
  204.         digit[2]=digit[2]+0x80;



  205.         //while(a--){
  206.                 write7279(0x84,digit[0]);
  207.                 short_delay();
  208.                 write7279(0x85,digit[1]);
  209.         short_delay();
  210.                 write7279(0x86,digit[2]);
  211.         short_delay();
  212.                 write7279(0x87,digit[3]);
  213.         short_delay();
  214.         //}
  215. }

  216. //*******語音模塊初始化*****
  217. /*void init_SC(void){
  218.         SC_DATA=0;
  219.         SC_RST=1;
  220.         delay_us(100);
  221.         SC_RST=0;
  222.         delay_us(100);
  223.         sp[0]=0;
  224.         sp[1]=0;
  225.         sp[2]=0;
  226. }
  227. void SC_Speech(uchar cnt){
  228.         uchar i;
  229.         SC_RST=1;
  230.         delay_us(100);
  231.         SC_RST=0;
  232.         delay_us(100);
  233.         for(i=0;i<cnt;i++){
  234.                 SC_DATA=1;
  235.                 delay_us(100);
  236.                 SC_DATA=0;
  237.                 delay_us(100);
  238.         }
  239. }
  240. void SC_WBusy(void){
  241.         uint times;
  242.         for(times=0;times<20;times++){
  243.                 delay_ms(100);
  244.                 if(SC_BUSY==0)
  245.                         break;
  246.         }
  247. }
  248. //*******控制地址段組合放音******
  249. void SC_Speechs(void){
  250.         sp[0]=24;
  251.         sp[1]=22;
  252.         sp[2]=23;
  253.         sp[3]=digit[0]+2;
  254.         sp[4]=27;
  255.         sp[5]=digit[1]+2;
  256.         sp[6]=15;
  257.         sp[7]=digit[2]+2;
  258.         sp[8]=20;
  259.         
  260.         SC_Speech(sp[0]);
  261.         SC_WBusy();
  262.         SC_Speech(sp[1]);
  263.         SC_WBusy();
  264.         SC_Speech(sp[2]);
  265.         SC_WBusy();
  266.         SC_Speech(sp[3]);
  267.         SC_WBusy();
  268.         SC_Speech(sp[4]);
  269.         SC_WBusy();
  270.         SC_Speech(sp[5]);
  271.         SC_WBusy();
  272.         SC_Speech(sp[6]);
  273.         SC_WBusy();
  274.         SC_Speech(sp[7]);
  275.         SC_WBusy();
  276.         SC_Speech(sp[8]);
  277.         SC_WBusy();
  278.         sp[0]=0;sp[1]=0;sp[2]=0;sp[3]=0;//播放完畢后將各位置于無語音播放的0地址位
  279.         sp[4]=0;sp[5]=0;sp[6]=0;sp[7]=0;SC_Speech(sp[8]);
  280. }
  281. */


  282. void init_7279(){
  283.         uchar i;
  284.         send_byte(CMD_RESET);
  285.         for(i=0;i<8;i++)
  286.         write7279(UNDECODE+i,1);
  287. }
  288. void write7279(uchar cmd,uchar dta){
  289.         send_byte(cmd);
  290.         send_byte(dta);
  291. }
  292. uchar read7279(uchar command){
  293.         send_byte(command);
  294.         return(receive_byte());
  295. }
  296. void send_byte(uchar out_byte){
  297.         uchar i;
  298.         cs=0;
  299.         long_delay();
  300.         for(i=0;i<8;i++){
  301.                 if(out_byte&0x80)
  302.                         dat=1;
  303.                 else
  304.                         dat=0;
  305.           clk=1;
  306.                 short_delay();
  307.                 clk=0;
  308.                 short_delay();
  309.                 out_byte=out_byte*2;
  310.         }
  311.         dat=0;
  312. }

  313. uchar receive_byte(void){
  314.         uchar i,in_byte;
  315.         dat=1;
  316.         long_delay();
  317.         for(i=0;i<8;i++){
  318.                 clk=1;
  319.                         short_delay();
  320.                 in_byte=in_byte*2;
  321.                 if(dat)
  322.                         in_byte=in_byte|0x01;
  323.                 clk=0;
  324.                         short_delay();
  325.         }
  326.         dat=0;
  327.         return(in_byte);
  328. }
  329.                



  330. void long_delay(void){
  331.         uint i;
  332.         for(i=0;i<30;i++);
  333. }
  334. void short_delay(void){
  335.         uchar i;
  336.         for(i=0;i<8;i++);
  337. }
  338. void delay10ms(uchar time){
  339.         
  340.         
  341.         uchar i;
  342.         uint j;
  343.         for(i=0;i<time;i++){
  344.                 for(j=0;j<0x390;j++){
  345.                         //if(!key)
  346.                                 //ket_int();
  347.                 }
  348.         }
  349. }
  350. void longdelay(uint time){
  351.         
  352.         
  353.         uint i;
  354.         uint j;
  355.         for(i=0;i<time;i++){
  356.                 for(j=0;j<110;j++){
  357.                         //if(!key)
  358.                                 //ket_int();
  359.                 }
  360.         }
  361. }
復制代碼
回復

使用道具 舉報

ID:1 發表于 2020-4-27 00:02 | 顯示全部樓層
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人在线 | 亚洲一区中文字幕 | 亚洲精品免费在线观看 | 成人免费一区二区三区牛牛 | 国产福利视频导航 | 亚洲美女av网站 | 精品久久久久久久久久久久久久 | 日韩国产一区二区三区 | 亚洲人成在线播放 | 亚洲第一av | 国产成人一区二区三区久久久 | 国产乱码精品一区二区三区忘忧草 | 日韩av福利在线观看 | 国产精品精品视频一区二区三区 | 精品国产乱码久久久久久蜜柚 | 国产激情在线观看 | 亚洲综合视频一区 | 国产精品免费看 | 国产精品日日摸夜夜添夜夜av | 成人在线中文字幕 | 一区二区成人 | www.亚洲| 国产精品久久久久久久久久免费看 | 国产精品一区二区不卡 | 精品国产一区二区三区四区在线 | 亚洲人成人一区二区在线观看 | 男人天堂久久久 | 国产在线1区 | 国际精品鲁一鲁一区二区小说 | 亚洲一区电影 | 99精品一区二区 | 亚洲欧洲综合av | 成人深夜福利在线观看 | 日韩中文字幕在线不卡 | 欧美在线一区二区三区 | 日本视频一区二区三区 | 欧美一级淫片免费视频黄 | 亚洲午夜视频在线观看 | av片免费| 国产黄色小视频在线观看 | 激情小视频 |