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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求助各位大俠,我的程序那里有問題啊?

[復制鏈接]
跳轉到指定樓層
樓主
ID:38720 發表于 2012-4-18 17:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

#include <reg51.h>
#include <intrins.h> 
#define uchar unsigned char
#define uint  unsigned int
#define LCD_data  P0             //數據口
sbit LCD_RS  =  P3^5;            //寄存器選擇輸入
sbit LCD_RW  =  P2^0;            //液晶讀/寫控制
sbit LCD_EN  =  P3^4;            //液晶使能控制
sbit LCD_PSB =  P2^1;            //串/并方式控制
sbit wela    =  P2^7;
sbit dula    =  P2^6;            //關閉LED燈
sbit wr=P3^6;
sbit rd=P3^7;
sbit fm=P2^3;
uint temp;
uchar p=3,q=1,jianzhi;
uint a1,a2,a3,date,q1;
uchar code dis1[] = {"畢業設計電子秤"};
uchar code dis2[] = {"單價:"};
uchar code dis3[] = {"重量:"};
uchar code dis4[] = {"總價:"};
uchar code table[]="0123456789";
uchar code table1[]="Kg";
uchar code table2[]={"元"};
uchar code dis5[] = {"2012畢業設計電子秤"};
uchar code dis6[] = {"姓名:錢志偉"};
uchar code dis7[] = {"學號:5901108126"};
uchar code dis8[] = {"歡迎老師批評指正"};
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};//宏定義延時4個CPU
uchar IRDIS[2];
uchar IRCOM[4];
void delay0(uchar x);  //x*0.14MS
void beep();
void  dataconv();
void lcd_pos(uchar X,uchar Y);  //確定顯示位置
     uint AD_read();
     key_read ();
void disp_ad();
void disp_dy();
void disp_kj();
void disp_jianpan(uchar jian);
void  disp_zongjia(uint qian);

void delay(int ms)
{
    while(ms--)
 {
      uchar i;
   for(i=0;i<250;i++) 
    {
     _nop_();     
  _nop_();
  _nop_();
  _nop_();
    }
 }
}  
bit lcd_busy()
 {                         
    bit result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    delayNOP();
    result = (bit)(P0&0x80);
    LCD_EN = 0;
    return(result);
 }
/*******************************************************************/
/*                                                                 */
/*寫指令數據到LCD                                                  */
/*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。                             */
/*                                                                 */
/*******************************************************************/
void lcd_wcmd(uchar cmd)
{                         
   while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
    _nop_();
    _nop_();
    P0 = cmd;
    delayNOP();
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0; 
}
/*******************************************************************/
/*                                                                 */
/*寫顯示數據到LCD                                                  */
/*RS=H,RW=L,E=高脈沖,D0-D7=數據。                               */
/*                                                                 */
/*******************************************************************/
void lcd_wdat(uchar dat)
{                         
   while(lcd_busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
    P0 = dat;
    delayNOP();
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0;
}
void lcd_init()
{

    LCD_PSB = 1;         //并口方式
   
    lcd_wcmd(0x34);      //擴充指令操作
    delay(5);
    lcd_wcmd(0x30);      //基本指令操作
    delay(5);
    lcd_wcmd(0x0F);      //顯示開,開光標
    delay(5);
    lcd_wcmd(0x01);      //清除LCD的顯示內容
    delay(5);
}
  main()
 {
    uchar w;
   
    uchar jiage[3];
   
    while(1)
    {
    
    delay(10);                 //延時
    wela=0;
    dula=0;
    lcd_init();                //初始化LCD            
    disp_kj();//開機界面的顯示
    delay(500);
     disp_dy();//顯示價格重量等固定的文字
       disp_ad();//AD轉換值的顯示
     while(q)//判斷標志位q是否為0,為0表示鍵盤按了確定鍵
     { uchar n=2;
       w=key_read ();//調出鍵值
       disp_jianpan(w);//將鍵值顯示
       jiage[n]=jianzhi;//將鍵值存入數組中
       p++;
       n--;
     }
     q=1;
      p=3;
     q1=jiage[2]*100+jiage[1]*10+jiage[0];//得到按鍵數
     disp_zongjia(q1);//總價的計算和顯示
   }
}

 

void delay0(uchar x)    //x*0.14MS
{
  uchar i;
  while(x--)
 {
  for (i = 0; i<13; i++) {}
 }
}
void lcd_pos(uchar X,uchar Y)
{                         
   uchar  pos;
   if (X==0)
     {X=0x80;}
   else if (X==1)
     {X=0x90;}
   else if (X==2)
     {X=0x88;}
   else if (X==3)
     {X=0x98;}
   pos = X+Y ; 
   lcd_wcmd(pos);     //顯示地址
}
/*AD轉換函數*/
uint AD_read()
{
  wela=1;
  P0=0;
  _nop_();
  wr=0;
   _nop_();
  wr=1;
  P0=0xff;
  delay(10);
 
  P0=0;
  rd=0;
  _nop_();
  P1=0xff;
  temp=P1;
  return temp;

}


/*鍵盤掃描程序*/


   key_read ()
 {
  unsigned char key,key1;
   while(1)
   {
      P3=0xfe;//給P3.0一個低電平
      key1=P3;
      key1=key1&0xf0;
      if(key1!=0xf0)
      {
       delay(10);//取抖
         if(key1!=0xf0)
         {
             
            key1=P3;
            switch(key1)
            {
               case 0xee://選中0號鍵
                 key=0;
                 break;

               case 0xde://選中1號鍵
                 key=1;
                 break;

               case 0xbe://選中2號鍵
                 key=2;
                 break;

               case 0x7e://選中3號鍵
                 key=3;
                 break;
             }
            }
          }

      P3=0xfd;//給P3.1一個低電平
      key1=P3;
      key1=key1&0xf0;
      if(key1!=0xf0)
      {
       delay(10);//取抖
         if(key1!=0xf0)
         {
             
            key1=P3;
            switch(key1)
            {
               case 0xed://選中4號鍵
                 key=4;
                 break;

               case 0xdd://選中5號鍵
                 key=5;
                 break;

               case 0xbd://選中6號鍵
                 key=6;
                 break;

               case 0x7d://選中7號鍵
                 key=7;
                 break;
             }
            }
           }

      P3=0xfb;//給P3.2一個低電平
      key1=P3;
      key1=key1&0xf0;
      if(key1!=0xf0)
      {
       delay(10);//取抖
         if(key1!=0xf0)
         {
             
            key1=P3;
            switch(key1)
            {
               case 0xeb://選中8號鍵
                 key=8;
                 break;

               case 0xdb://選中9號鍵
                 key=9;
                 break;

               case 0xbb://選中10號鍵
                 key=10;
                 break;

               case 0x7b://選中11號鍵
                 key=11;
                 break;
             }
            }
           }

      P3=0xf7;//給P3.3一個低電平
      key1=P3;
      key1=key1&0xf0;
      if(key1!=0xf0)
      {
       delay(10);//取抖
         if(key1!=0xf0)
         {
             
            key1=P3;
            switch(key1)
            {
               case 0xe7://選中12號鍵
                 key=12;
                 break;

               case 0xd7://選中13號鍵
                 key=13;
                 break;

               case 0xb7://選中14號鍵
                 key=14;
                 break;

               case 0x77://選中15號鍵
                 key=15;
                 break;
             }
            }
           }
      return key;
   }
 }
/*  AD轉換數值顯示函數*/
void disp_ad()
{
  uint ad_read;
     ad_read=AD_read();//將AD轉換函數的返回值調出
    date=(float)ad_read*50.0/256.0;
    a1=date;
    a2=a1/10;
    a3=a1%10;
    lcd_pos(2,3);
      lcd_wdat(table[a2]);
      lcd_pos(2,4);
      lcd_wdat('.');
      lcd_pos(2,5);
      lcd_wdat(table[a3]);
      lcd_pos(2,6);
      lcd_wdat(table1[0]);
     lcd_pos(2,7);
      lcd_wdat(table1[1]);
}
void disp_dy()
{
   uchar i;
   lcd_pos(0,0);             //設置顯示位置為第一行的第1個字符
     i = 0;
    while(dis1 != '\0')
     {                         //顯示字符
       lcd_wdat(dis1);
       i++;
     }
    lcd_pos(1,0);             //設置顯示位置為第二行的第1個字符
     i = 0;
    while(dis2 != '\0')
     {
       lcd_wdat(dis2);      //顯示字符
       i++;
     }
   lcd_pos(2,0);             //設置顯示位置為第三行的第1個字符
     i = 0;
    while(dis3 != '\0')
     {
       lcd_wdat(dis3);      //顯示字符
       i++;
     }
  lcd_pos(3,0);             //設置顯示位置為第四行的第1個字符
     i = 0;
    while(dis4 != '\0')
     {
       lcd_wdat(dis4);      //顯示字符
       i++;
     }
}

void disp_kj()
{
   uchar i;
   lcd_pos(0,0);             //設置顯示位置為第一行的第1個字符
     i = 0;
    while(dis5 != '\0')
     {                         //顯示字符
       lcd_wdat(dis1);
       i++;
     }
    lcd_pos(1,0);             //設置顯示位置為第二行的第1個字符
     i = 0;
    while(dis6 != '\0')
     {
       lcd_wdat(dis2);      //顯示字符
       i++;
     }
   lcd_pos(2,0);             //設置顯示位置為第三行的第1個字符
     i = 0;
    while(dis7 != '\0')
     {
       lcd_wdat(dis3);      //顯示字符
       i++;
     }
  lcd_pos(3,0);             //設置顯示位置為第四行的第1個字符
     i = 0;
    while(dis8 != '\0')
     {
       lcd_wdat(dis4);      //顯示字符
       i++;
     }
}

void  disp_jianpan(uchar jian)
{
  uchar a;
  a=jian;
    if(a<10)
       {lcd_pos(1,p);
       lcd_wdat(table[a]);//將鍵值顯示
       jianzhi=table[a];}//if中要執行多個語句時要加大括號,
    else if(a=10)
           q=0;//確認鍵
        else
          fm=0;//警報響         
}
void  disp_zongjia(uint qian)
{
   uchar z1,z2,z3,z4;
   float q3,q2;
   uint x, z0;
   x=qian;
   q3=a3*0.1+a2;
     q2=x*q3;
     z0=q2*10;
     z1=(int)z0/1000;
     z2=(int)z0%1000/100;
     z3=(int)z0%1000%100/10;
     z4=(int)z0%1000%100%10;
     lcd_pos(3,3);
      lcd_wdat(table[(int)z1]);
      lcd_pos(3,4);
      lcd_wdat(z2);
      lcd_pos(3,5);
      lcd_wdat(table[(int)z3]);
      lcd_pos(3,6);
      lcd_wdat('.');
      lcd_pos(3,7);
      lcd_wdat(table[(int)z4]);
}

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久影院8一贰佰 | 天天草天天射 | 97免费在线视频 | 九九久久国产精品 | 美女啪啪国产 | 亚洲精品乱码久久久久久蜜桃91 | 亚洲欧美激情国产综合久久久 | 久久国产精品网 | 久久免费小视频 | 欧美日韩免费在线 | 视频在线一区 | 最新黄色毛片 | 国产精久久久久久 | 国产精品久久久久婷婷二区次 | 成人欧美一区二区三区黑人孕妇 | 羞羞的视频在线看 | 亚洲一区国产精品 | 日韩精品成人av | 国产在线观看av | 国产精品一区二区欧美 | 九九热这里只有精品在线观看 | 国产激情| 色播99 | 在线观看免费观看在线91 | 国产一区二区在线播放 | 在线午夜 | 欧美片网站免费 | 久久婷婷色 | av在线视| 久久另类视频 | 97人人爱 | 91资源在线观看 | 国产午夜精品视频 | 久久久资源 | 日韩aⅴ片 | 亚洲欧美日韩精品久久亚洲区 | 精品国产伦一区二区三区观看体验 | 日本精品一区二区三区在线观看视频 | 日本成人毛片 | 91视频在线看 | 日韩在线不卡 |