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

標題: 為什么我的主函數這樣寫,在51單片機液晶上按上下鍵沒有任何顯示? [打印本頁]

作者: wqd0829    時間: 2019-10-19 11:45
標題: 為什么我的主函數這樣寫,在51單片機液晶上按上下鍵沒有任何顯示?
Keil4編寫環境:A/D數模轉換和按鍵應用操作顯示到Lcd1602上,子程序Lcd1602.c,keyboard.c,I2C.c程序略,跪求主程序
程序要求實現:按上鍵查詢設定的電壓值上下限
                      按下鍵查詢當前的電壓值(當前電壓值是滑動變阻器所配置的電壓值)
                      數據采集器件用的是PCF8591測AIN0的值
為什么我的主函數這樣寫,在51液晶上按上下鍵沒有任何顯示,跪求主函數,開發板是金三角開發板

#include <reg52.h>
sbit BUZZ = P1^6;  
bit flag300ms = 1;
bit enBuzz = 0;
unsigned char T0RH = 0;
unsigned char T0RL = 0;
unsigned int CountDown = 0;
void ConfigTimer0(unsigned int ms);
unsigned char GetADCValue(unsigned char chn);
void ValueToString(unsigned char *str, unsigned char val);
extern void I2CStart();
extern void I2CStop();
extern void KeyScan();
extern void KeyDriver();
extern unsigned char I2CReadACK();
extern unsigned char I2CReadNAK();
extern bit I2CWrite(unsigned char dat);
extern void InitLcd1602();
extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
void main()
{
    EA = 1;
   ConfigTimer0(10);  
   InitLcd1602();
// LcdShowStr (0, 0, "moli");
while(1)
{
     KeyDriver();
}
}
unsigned char GetADCValue (unsigned char chn)
{
      unsigned char val;
     I2CStart();
    if (!I2CWrite (0x48<<1))
    {
        I2CStop();
        return 0;
    }
I2CWrite (0x40 | chn);
I2CStart();
I2CWrite ((0x48<<1) | 0x01);
I2CReadACK();
val = I2CReadNAK();
I2CStop();
return val;
}
void ValueToString(unsigned char *str, unsigned char val)
{
     
  val = (val * 25) / 55;
  str[0] = (val/10) + '0';  
  str[1] = '.';   //С????
  str[2] = (val%10) + '0';  
  str[3] = 'V';  
  str[4] = '\0';
}
void KeyTaAction()
{
    unsigned char val;
    unsigned char str[10];
    InitLcd1602();
    LcdShowStr (0, 0, "TABANXINHAO");  
     while (1)
    {
         if (flag300ms)
     {
         flag300ms = 0;
           
        val = GetADCValue(0);
        ValueToString(str, val);
        LcdShowStr(0, 1, str);
      if (val >= 200)
      {
         enBuzz = 1;
        if (enBuzz)
           BUZZ = ~BUZZ;
      }
      else
          BUZZ = 1;
   }
  }
}
void KeyAction (unsigned char keycode)
{
   if(keycode == 0x26)
    {
      KeyTaAction();
    }
  else if (keycode == 0x28)
   {
     LcdShowStr (0, 0, "MAX");
     LcdShowStr (0, 1, 2^5);   
     LcdShowStr (6, 0, "MIN");
     LcdShowStr (6, 1, 0^0);
   }
}
void ConfigTimer0(unsigned int ms)
{
    unsigned long tmp;  
tmp = 11059200 / 12;
tmp = (tmp * ms) / 1000;
tmp = 65536 - tmp;
tmp = tmp + 12;
T0RH = (unsigned char)(tmp >> 8);
T0RL = (unsigned char)tmp;
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = T0RH;
TL0 = T0RL;
ET0 = 1;
TR0 = 1;
}
void InterruptTimer0() interrupt 1
{
    static unsigned char tmr300ms = 0;
TH0 = T0RH;
TL0 = T0RL;
tmr300ms++;
if (tmr300ms >= 30)  
{
     tmr300ms = 0;
  flag300ms = 1;
}
}


作者: 來51學習2    時間: 2019-10-19 12:40
1、沒有看到你寫的液晶驅動程序
2、沒有看到你寫的AD轉換程序
3、沒有看到有按鍵定義
作者: zycstc    時間: 2019-10-19 12:54
要先確定是不是LCD1602的程序問題
作者: wqd0829    時間: 2019-10-19 14:37
#include <reg52.h> #define LCD1602_DB P0 sbit LCD1602_RS = P1^0; sbit LCD1602_RW = P1^1; sbit LCD1602_E = P1^5; /*???????????*/ void LcdWaitReady() {     unsigned char sta;         LCD1602_DB = 0xFF;         LCD1602_RS = 0;         LCD1602_RW = 1;         do{            LCD1602_E = 1;            sta = LCD1602_DB; //???????            LCD1602_E = 0;         }while(sta & 0x80);           //Bit7????1?????????????????????????0?? } /*??LCD1602???д??????????cmd-??д?????????*/ void LcdWriteCmd(unsigned char cmd) {      LcdWaitReady();          LCD1602_RS = 0;          LCD1602_RW = 0;          LCD1602_DB = cmd;          LCD1602_E = 1;          LCD1602_E = 0; } /*??LCD1602???д???????????dat-??д???????*/ void LcdWriteDat(unsigned char dat) {      LcdWaitReady();          LCD1602_RS = 1;          LCD1602_RW = 0;          LCD1602_DB = dat;          LCD1602_E = 1;          LCD1602_E = 0; } /*???????RAM?????????????λ?????x,y??-????????????????*/ void LcdSetCursor(unsigned char x, unsigned char y) {      unsigned char addr;          if (y == 0)                addr = 0x00 + x;          else              addr = 0x40 + x;          LcdWriteCmd(addr | 0x80); } /*???????????????????x,y??-????????????????str-????????*/ void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str) {     LcdSetCursor(x, y);         while (*str != '\0')           {             LcdWriteDat(*str++);         } } /*?????1602???*/ void InitLcd1602() {     LcdWriteCmd(0x38);         LcdWriteCmd(0x0C);         LcdWriteCmd(0x06);         LcdWriteCmd(0x01); }
作者: wqd0829    時間: 2019-10-19 14:46
來51學習2 發表于 2019-10-19 12:40
1、沒有看到你寫的液晶驅動程序
2、沒有看到你寫的AD轉換程序
3、沒有看到有按鍵定義

大佬,我重新加上了,重新又發了個懸賞帖,望解答下求51大神
http://www.zg4o1577.cn/bbs/dpj-171595-1.html
(出處: 單片機論壇)

作者: wqd0829    時間: 2019-10-19 14:47
zycstc 發表于 2019-10-19 12:54
要先確定是不是LCD1602的程序問題

求51大神
http://www.zg4o1577.cn/bbs/dpj-171595-1.html
(出處: 單片機論壇)
大佬看這個懸賞貼,程序全部貼上了,,謝謝




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久精品91| av在线一区二区三区 | 日本久久精品 | 黄色av网站免费看 | 色综合天天网 | 精品国产乱码久久久久久1区2区 | 欧美激情国产日韩精品一区18 | 天天综合久久 | 国产日产精品一区二区三区四区 | 免费精品 | 成人免费一区二区三区视频网站 | 99精品99 | 在线观看亚洲一区二区 | 国产亚洲黄色片 | 国产人成在线观看 | 天堂色区 | 韩日有码 | 综合国产 | 99视频免费在线观看 | 国产欧美精品 | 在线观看一区 | 91国内精品 | 羞羞视频在线观看 | 我想看一级黄色毛片 | 欧美v日韩v| 亚洲高清久久 | 国产精品theporn| 国产精品久久久久久久久久久久午夜片 | 日本午夜免费福利视频 | 久久久性色精品国产免费观看 | 日本精品视频 | 亚洲国产成人精品久久 | 国产在线97 | 三级国产三级在线 | 久草.com| 久草久 | 亚洲精品国产精品国自产在线 | 91极品视频 | 久久一级大片 | 翔田千里一区二区 | 亚洲va国产日韩欧美精品色婷婷 |