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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+1602多重數據顯示程序問題 有實時數據 有按鍵值數據 無法正常工作

[復制鏈接]
跳轉到指定樓層
樓主
ID:254747 發表于 2019-11-10 16:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是部分代碼  全部代碼功能量比較大    無法全部貼上來   我簡單的描述一下我遇到的問題   
  1.  在沒有 “disp_adc_voltage();             //顯示電壓數據到顯示屏”      這個函數的時候,我的1602可以隨時顯示我的 編碼器按鍵數值我要多少直接轉動就是了 但不是實時數據  也就是按鍵在轉動的時候才有按鍵值發生變化


  2. 加入了這個函數“disp_adc_voltage();  ”后就不行了  在改變按鍵值就無法進入“ keyscan();”這個函數了 ,就算進了 也是不準的 轉動按鍵數值也不會變化 要很久才變化     這個disp_adc_voltage();  “”是顯示電壓的   電壓顯示是實時數據    是不是因為1602有實時數據寫入  然后在轉動按鍵無法寫入按鍵新的數據了啊



  3.要解決這個問題該怎么弄啊   是讓  ADC 顯示 為間歇性的嗎     請高手指點一下     我百度了 也看論壇了  但是沒有類似這樣的問題  

單片機源程序如下:

#include <STC12C5A60S2.H>

#include "all_function_api.h"

#include "stdint.h"

sbit  LED = P3^7;

sbit  LED_1 = P3^6;

sbit  key  = P3^0;


sbit    Pin_Portry_Sd=P2^2;

/*--------------------------------
功能:該變量用于保存按鍵值1
--------------------------------*/
extern uint8_t  Sd_Key_Value ;



/*--------------------------------
功能: 該變量用于保存按鍵值2
---------------------------------*/
extern uint8_t  Sd_Key_Value2 ;


/*---------------------------------
功能:該變量用于保存按鍵值3
---------------------------------*/
extern uint8_t  Sd_Key_Value3 ;


unsigned char keyjishu=0;




/*-------------------------------
多功能按鍵實現
--------------------------------*/
void  keyscan()
{
        

        //在初始化 第二屏幕類容之前用了清屏指令,故從新寫入顯示屏的地址
        //第一排為 0x80  第二排為 0xc0  要記住哦
                //利用switch 來切換,這個條件語句切換的更多 更有優勢一些
                   if(Pin_Portry_Sd !=1)
                     {
                           
                           delay_5ms(20);   //消抖
                     
                      if(Pin_Portry_Sd !=1)
                            {

                                while(!Pin_Portry_Sd);
                                keyjishu++;

                            }

                          }

                         switch(keyjishu)
                         {
                            case 1 :
                              {
                                         
                                
                        //        CR=1;                    
                                   lcd_write_com(0x80); //光標位置 第一位就是0可以不加   你要在第幾位開始顯示就是顯示屏格數-1 例如第3位 就是+2即可
                        lcd_write_com(0x0f);  //光標閃爍                                   
                                if(Data_key_freq(&Sd_Key_Value));
                        
                            }
                               break;
                  
                        
                            case 2 :
                              {
                             
                                 keyjishu=3;               //這里直接賦值是為了在打開混頻的時候減少一次按鍵,就直接調整旋鈕即可調整混頻
                                 lcd_write_com(0x80+14);  //寫入‘O’的地址
                                 write_date_('O');
                                 lcd_write_com(0x80+15); //寫入‘N’的地址
                                 write_date_('N');
                                 TR1 = 1;                             
                           }

                            break;
                  
                  
                          case 3 :
                              {
                             
                                    lcd_write_com(0x80+6);           //寫入‘F’光標地址
                                    if(Data_key_freq_2(&Sd_Key_Value2));
                           
                           }
                             break;
               
                          
                           case 4 :
                              {


                           
                            // keyjishu=1;          //  這里清為1 表示在關閉混頻的時候減少一次按鍵直接調整主頻    如果清0 就要增加幾次按鍵 很麻煩                     
                                    lcd_write_com(0x80+14);
                                 write_date_('O');                //寫入‘O’的地址
                                 lcd_write_com(0x80+15);
                                 write_date_('F');                //寫入‘F’的地址
                                 lcd_write_com(0x0c);
                                    TR1 = 0;                                 //關閉定時器  關閉混頻
                           }   
                              break;
                 
                           case 5 :
                              {
                             CR=1;
                                 lcd_write_com(0x0f);  //光標閃爍
                                 lcd_write_com(0xc0);  //寫入光標地址
                                 if(Data_key_duty_3(&Sd_Key_Value3));
                           
                           }   
                              break;

                        
                       }

                           if(6 == keyjishu)
                                {
                                   keyjishu=1;
                                
                                }
                        
                  
                  
}

/*------------------------
主函數 主函數入口
--------------------------*/
void main()                                               
{                  
                  //1602初始化
          lcd_init();

                  //開機畫面1 初始化
                  Boot_screen_init_0();
               
                  //開機密碼檢測,當密
                  //碼輸入成功,進入程序
                  kaijimima_key_init();


                   //開機畫面2 初始化
                  Boot_screen_init_1();

                  //PWM PCA寄存器初始化
                  PCAregister_init();

                  //E2PROM初始化
                  E2PROM_init();

                  //定時器1初始化
                  Timer1_Init();

                  //定時器0 初始化
          Timer0_Init();

                  //ADC配置 初始化
                  Init_ADC();

                  //關閉定時器T1  防止一進來就啟動混頻
                  TR1 = 0;                                          

                 
/*--------------------------
大循環
---------------------------*/                 
while(1)
{
                 
               
                         keyscan();                                                 //功能按鍵函數
                     disp_adc_voltage();             //顯示電壓數據到顯示屏
                        

                        
               
                         ZPgengxin(Sd_Key_Value);         //把變化的數據寫入到定時器PCA時鐘里面 來改變主頻數據

                         disp_ZPzankongbi(Sd_Key_Value3); //把占空比變化的值寫到顯示屏里面


                 disp_zhuping(Sd_Key_Value);             //從24c02第4扇區里面把數據讀出來,達到復位掉電存儲的效果         
                  

                     disp_fuping(Sd_Key_Value2);           //把副頻的值顯示屏到屏幕上
                        

                           
                //        Duty_Cycle(Sd_Key_Value2);          //副頻變化寫入到函數里面; 備用 直接賦值到 定時器里面

                        
        

                        
               



                         CCAP1H =CCAP1L = Sd_Key_Value3; //把占空比變化的值寫到PCA寄存器里面
                         CCAP0H =CCAP0L = Sd_Key_Value3; //把占空比變化的值寫到PCA寄存器里面

                        

                         OVP_ADC_1();                    //過壓保護

        //                disp(AT_24c02_read(1));             //從24c02第4扇區里面把數據讀出來,達到復位掉電存儲的效果


                //        disp_fuping(Sd_Key_Value2);   //同時把副頻的變化顯示出來;


           //        AT_24c02_Write( 2, Sd_Key_Value2);  //同時寫到24C02的第4扇區

                //        disp(Sd_Key_Value);
                                
                          
                 
                   // if(Data_key(&Sd_Key_Value));  
                  //  Data_key();//不停的掃描開關函數是否發生變化
  }
                  
                  
   
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:254747 發表于 2019-11-11 10:01 | 只看該作者
感謝各位大佬的幫助    這個問題又被我突破了     開始我的軟件沒法仿真   沒有破解   后面破解了   仿真了一下   發現問題在ADC求平均值100次里面耗時太長  導致程序一時半會退不出  ADC      
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区精品在线 | 午夜国产一区 | 天天插天天狠天天透 | 日韩有码一区 | 国产精品久久国产精品久久 | 日韩欧美专区 | 欧美v在线| 懂色av一区二区三区在线播放 | 国产中文在线 | 国产偷录视频叫床高潮对白 | 一区二区av| 亚洲一区二区三区视频免费观看 | 欧美一级视频免费看 | 伊人免费在线观看高清 | 伊人精品视频 | 久久一区二区三区电影 | 欧美在线观看一区二区 | 国产在线观看一区二区三区 | 午夜亚洲 | 精品一二三区在线观看 | 色秀网站 | 久久久久精 | 欧美日韩第一页 | 桃花av在线 | 国产精品婷婷 | 九一在线观看 | 99热视 | 在线亚洲免费 | 久久国产精品99久久久久久丝袜 | 欧美二级| 一区二区三区国产好 | 久久久久久国产精品免费免费 | 午夜影院黄 | 国产一区二区三区日韩 | 国产精彩视频在线观看 | 欧美成人精品欧美一级 | 久久不卡 | 亚洲视频在线观看 | 亚洲成人精品久久久 | 精品国产乱码久久久久久蜜柚 | a在线免费观看视频 |