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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

電子秤程序及仿真圖 附課程設計報告書

[復制鏈接]
跳轉到指定樓層
樓主
電子秤的程序及仿真圖

目錄
電子技能課程設計報告書......................................................................................... 1
基于AT89C51的數字電子秤的設計...................................................................... 1
1、設計目的......................................................................................................... 1
2、設計的主要內容和要求................................................................................ 1
3、 整體設計方案............................................................................................... 1
3.1設計方案................................................................................................... 1
3.2工作原理................................................................................................... 1
4、 硬件電路的設計........................................................................................... 2
5、軟件設計......................................................................................................... 3
5.1主程序設計.............................................................................................. 3
5.2 LM4229液晶顯示驅動程序.................................................................. 4
5.3 ADC0832采樣程序................................................................................. 5
5.4 4*4鍵盤程序............................................................................................ 6
6、系統仿真......................................................................................................... 6
7、 使用說明 ..................................................................................................... 9
8、設計總結......................................................................................................... 9
參考文獻................................................................................................................ 9
附錄A ................................................................................................................ 10



單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include <absacc.h>
  4. #include <math.h>
  5. #include<lm4229.h>
  6. #define uchar unsigned char
  7. #define uint   unsigned int
  8. sbit ADCS =P3^5;
  9. sbit ADDI =P3^7;  
  10. sbit ADDO =P3^7;  
  11. sbit ADCLK =P3^6;  
  12. uint x1,y1,z1=0,w1;
  13. uchar ad_data,k,n,m,e,num,s;                              //采樣值存儲
  14. uint temp1;
  15. sbit beep =P3^0;                                          
  16. char press_data;                                  //標度變換存儲單元
  17. float  press;
  18. unsigned char ad_alarm,temp;                           //報警值存儲單元
  19. unsigned char abc[5]={48,46,48,48,48};
  20. unsigned char price_all[6]={48,48,46,48,48,48};
  21. float price_unit[10]={5.5,2.8,3.6,4.5,5.8,6.8,7.9,8.0,9.5,0};       //商品初始單價
  22. uchar price_danjia[5]={48,46,48,48,48};
  23. float price;
  24. uint price_temp1,price_temp2;                             //商品總價      
  25. uchar Adc0832(unsigned char channel);                                                                                                                        
  26. void alarm(void);
  27. void data_pro(void);
  28. void delay(uint k);
  29. void keyscan();
  30. void disp_init();
  31. void  price_jisuan();
  32. /************
  33. 主函數
  34. ************/
  35. void main(void)
  36. {
  37.    delay(500);                        //系統延時500ms啟動
  38.    //ad_data=0;                       //采樣值存儲單元初始化為0
  39.    lcd_init();                        //顯示初始化
  40.    disp_init();                                          //開始進入歡迎界面
  41.    delay(1000);                                                  //延時進入稱量畫面
  42.    clear_lcd(0,4,40);
  43.    clear_lcd(16,0,100);
  44.    clear_lcd(28,0,40);
  45.    clear_lcd(44,0,100);
  46.    clear_lcd(56,0,40);
  47.    clear_lcd(72,0,100);
  48.    clear_lcd(84,0,40);
  49.    clear_lcd(100,0,100);
  50.    clear_lcd(112,0,40);
  51.    write_lcd(0,8,"實用電子秤");              
  52.         while(1)
  53.     {
  54.            ad_data =Adc0832(0);           //采樣值存儲單元初始化為0
  55.            alarm();
  56.            data_pro(); //讀取重量
  57.            keyscan();  //查詢商品種類
  58.            write_lcd(40,0,"------------------------------");
  59.            write_lcd(56,0,"單  價:");
  60.            write_lcd(56,11,price_danjia);
  61.            write_lcd(56,20,"元/千克");
  62.            write_lcd(72,0,"總重量:");
  63.            write_lcd(72,11,abc);
  64.            write_lcd(72,20,"千克");
  65.            write_lcd(88,0,"總  價:");
  66.            price_jisuan();           //計算出價格
  67.            write_lcd(88,10,price_all);
  68.            write_lcd(88,20,"元");
  69.            write_lcd(112,0,"設計學生: 0612201*16 朱珍奇");
  70.         }
  71. }
  72. /************
  73. 讀ADC0832函數
  74. ************/

  75. //采集并返回
  76. uchar Adc0832(unsigned char channel)     //AD轉換,返回結果
  77. {
  78.      uchar i=0;
  79.     uchar j;
  80.     uint dat=0;
  81.     uchar ndat=0;

  82.     if(channel==0)channel=2;
  83.     if(channel==1)channel=3;
  84.     ADDI=1;
  85.     _nop_();
  86.     _nop_();
  87.     ADCS=0;//拉低CS端
  88.     _nop_();
  89.     _nop_();
  90.     ADCLK=1;//拉高CLK端
  91.     _nop_();
  92.     _nop_();
  93.     ADCLK=0;//拉低CLK端,形成下降沿1
  94.     _nop_();
  95.     _nop_();
  96.     ADCLK=1;//拉高CLK端
  97.     ADDI=channel&0x1;
  98.     _nop_();
  99.     _nop_();
  100.     ADCLK=0;//拉低CLK端,形成下降沿2
  101.     _nop_();
  102.     _nop_();
  103.     ADCLK=1;//拉高CLK端
  104.     ADDI=(channel>>1)&0x1;
  105.     _nop_();
  106.     _nop_();
  107.     ADCLK=0;//拉低CLK端,形成下降沿3
  108.     ADDI=1;//控制命令結束
  109.     _nop_();
  110.     _nop_();
  111.     dat=0;
  112.     for(i=0;i<8;i++)
  113.     {
  114.         dat|=ADDO;//收數據
  115.         ADCLK=1;
  116.         _nop_();
  117.         _nop_();
  118.         ADCLK=0;//形成一次時鐘脈沖
  119.         _nop_();
  120.         _nop_();
  121.         dat<<=1;
  122.         if(i==7)dat|=ADDO;
  123.     }  
  124.     for(i=0;i<8;i++)
  125.     {
  126.         j=0;
  127.         j=j|ADDO;//收數據
  128.         ADCLK=1;
  129.         _nop_();
  130.         _nop_();
  131.         ADCLK=0;//形成一次時鐘脈沖
  132.         _nop_();
  133.         _nop_();
  134.         j=j<<7;
  135.         ndat=ndat|j;
  136.         if(i<7)ndat>>=1;
  137.     }
  138.     ADCS=1;//拉搞CS端
  139.     ADCLK=0;//拉低CLK端
  140.     ADDO=1;//拉高數據端,回到初始狀態
  141.     dat<<=8;
  142.     dat|=ndat;
  143.     return(dat);            //return ad k         
  144. }


  145. void data_pro(void)
  146. {
  147.       unsigned int;                             
  148.           if(0<ad_data<256)                                      
  149.                  {                           
  150.                     int vary=ad_data;                                                                        
  151.                         press=(0.019531*vary);                        
  152.                                                                                                                   
  153.                         temp1=(int)(press*1000);                        //放大1000倍,便于后面的計算
  154.                            abc[0]=temp1/1000+48;                                     //取壓力值百位
  155.                         abc[1]=46;
  156.                         abc[2]=(temp1%1000)/100+48;                            //取壓力值十位
  157.                         abc[3]=((temp1%1000)%100)/10+48;                    //取壓力值個位
  158.                         abc[4]=((temp1%1000)%100)%10+48;                        //取壓力值十分位

  159.                       }            
  160.                         
  161. }
  162. /*****************報警子函數*******************/

  163. void alarm(void)
  164. {
  165.          if(ad_data>=256)                        

  166.            beep=0;          //則啟動報警
  167.         
  168.           else
  169.                beep=1;                  
  170. }

  171. void delay(uint k)
  172. {
  173.    uint i,j;
  174.    for(i=0;i<k;i++)
  175.     for(j=0;j<100;j++);
  176. }
  177. //開機歡迎界面
  178. void disp_init()
  179. {
  180.    write_lcd(0,8,"歡迎使用電子秤");
  181.    write_lcd(16,0,"------------------------------");
  182.    write_lcd(28,0,"設計學生:朱珍奇");
  183.    write_lcd(44,0,"------------------------------");
  184.    write_lcd(56,0,"班級學號:0612201*16");
  185.    write_lcd(72,0,"------------------------------");
  186.    write_lcd(84,0,"指導老師:龔倫峰");
  187.    write_lcd(100,0,"------------------------------");
  188.    write_lcd(112,0,"設計日期:2009年6月16日");

  189. }


  190. //鍵盤服務程序
  191. void keyscan()
  192. {
  193.                         P1=0xfe;
  194.                         temp=P1;
  195.                         temp=temp&0xf0;
  196.                         while(temp!=0xf0)
  197.                                 {
  198.                                         delay(5);
  199.                                         temp=P1;
  200.                                         temp=temp&0xf0;
  201.                                         while(temp!=0xf0)
  202.                                         {
  203.                                                 temp=P1;
  204.                                         switch(temp)
  205.                                                 {                                                                                                                                                
  206.                                                         case 0xee:num=1,price=price_unit[0], write_lcd(24,0,"名  稱:   杏    仁");
  207.                                                                 break;
  208.                                                         case 0xde:num=2,price=price_unit[1],write_lcd(24,0,"名  稱:   李     子");
  209.                                                                 break;
  210.                                                         case 0xbe:num=3,price=price_unit[2],write_lcd(24,0,"名  稱:   草     莓");
  211.                                                                 break;
  212.                                                         case 0x7e:num=4,price=price_unit[3],write_lcd(24,0,"名  稱:   葡     萄");
  213.                                                                 break;
  214.                                                 }
  215.                                         while(temp!=0xf0)
  216.                                                 {
  217.                                                         temp=P1;
  218.                                                         temp=temp&0xf0;
  219.                                                 }
  220.                                         }
  221.                                 }

  222.                         P1=0xfd;
  223.                         temp=P1;
  224.                         temp=temp&0xf0;
  225.                         while(temp!=0xf0)
  226.                                 {
  227.                                         delay(5);
  228.                                         temp=P1;
  229.                                         temp=temp&0xf0;
  230.                                         while(temp!=0xf0)
  231.                                         {
  232.                                                 temp=P1;
  233.                                         switch(temp)
  234.                                                 {
  235.                                                         case 0xed:num=5,price=price_unit[4],write_lcd(24,0,"名  稱:   西     瓜");
  236.                                                                 break;
  237.                                                         case 0xdd:num=6,price=price_unit[5],write_lcd(24,0,"名  稱:   蘋     果");
  238.                                                                 break;
  239.                                                         case 0xbd:num=7,price=price_unit[6],write_lcd(24,0,"名  稱:   雪     梨");
  240.                                                                 break;
  241.                                                         case 0x7d:num=8,price=price_unit[7],write_lcd(24,0,"名  稱:   核     桃");
  242.                                                                 break;
  243.                                                 }
  244.                                         while(temp!=0xf0)
  245.                                                 {
  246.                                                         temp=P1;
  247.                                                         temp=temp&0xf0;
  248.                                                 }
  249.                                         }
  250.                                 }


  251.                         P1=0xfb;
  252.                         temp=P1;
  253.                         temp=temp&0xf0;
  254.                         while(temp!=0xf0)
  255.                                 {
  256.                                         delay(5);
  257.                                         temp=P1;
  258.                                         temp=temp&0xf0;
  259.                                         while(temp!=0xf0)
  260.                                         {
  261.                                                 temp=P1;
  262.                                         switch(temp)
  263.                                                 {
  264.                                                         case 0xeb:num=9,price=price_unit[8],write_lcd(24,0,"名  稱:   香     蕉");
  265.                                                                 break;
  266.                                                         case 0xdb:num=10,price=price_unit[9],write_lcd(24,0,"名  稱:    商品代碼");
  267.                                                                 break;
  268.                                                         case 0xbb:num=11,price=price_unit[1];
  269.                                                                 break;
  270.                                                         case 0x7b:num=12,price=price_unit[2];
  271.                                                                 break;
  272.                                                 }
  273.                                         while(temp!=0xf0)
  274.                                                 {
  275.                                                         temp=P1;
  276.                                                         temp=temp&0xf0;
  277.                                                 }
  278.                                         }
  279.                                 }


  280.                         P1=0xf7;
  281.                         temp=P1;
  282.                         temp=temp&0xf0;
  283.                         while(temp!=0xf0)
  284.                                 {
  285.                                         delay(5);
  286.                                         temp=P1;
  287.                                         temp=temp&0xf0;
  288.                                         while(temp!=0xf0)
  289.                                         {
  290. ……………………

  291. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載 帶仿真 程序 課程設計報告書:
dfg.rar (1.1 MB, 下載次數: 132)



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

使用道具 舉報

沙發
ID:439735 發表于 2018-12-6 22:32 | 只看該作者
這個能把程序改成12864液晶屏的程序嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久久久毛片 | 一级毛片免费完整视频 | 精品久久久久久久久久久 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 精品久久久久久久久亚洲 | 国产欧美一区二区三区日本久久久 | 日韩一二三区视频 | 日韩精品在线观看免费 | 网络毛片 | 精品一区二区三区四区外站 | 一区二区三区视频免费看 | 狠狠影院| www.成人.com | 精品一区二区三区在线观看国产 | 亚洲一区二区久久 | 久久91精品久久久久久9鸭 | 成人av免费在线观看 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | xxx.在线观看 | h网站在线观看 | 国产成人精品一区二区 | 欧美精品一区免费 | 亚洲成人精品一区 | 欧美另类视频 | 亚洲人人 | 91视视频在线观看入口直接观看 | 日日干夜夜草 | 国产精品99久久久久 | 精品一区国产 | 韩日免费视频 | 久久久亚洲一区 | 午夜免费电影 | 欧美精品一二区 | 色精品视频 | 久久久久久精 | 亚洲国产中文在线 | 亚洲一区二区三区在线播放 | 伊人性伊人情综合网 | 日本视频一区二区三区 | 国产精品第2页 | 婷婷在线网站 |