找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1313|回复: 2
打印 上一主题 下一主题
收起左侧

单片机ADC程序为啥不工作?

[复制链接]
跳转到指定楼层
楼主
ID:600683 发表于 2019-8-22 12:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define U8 unsigned char
  4. #define U16 unsigned int
  5. #define LCD_DATA P0
  6. U8 getdata;
  7. U8 X1,X2,X3,X4;
  8. U8 f;
  9. sbit OE=P3^7;
  10. sbit star=P3^6;
  11. sbit eoc=P3^3;
  12. sbit ALE=P2^6;
  13. sbit stoid=P3^5;
  14. sbit adda=P2^3;
  15. sbit addb=P2^4;
  16. sbit addc=P2^5;
  17. sbit ksad=P3^0;
  18. sbit LCD_RS=P2^0;
  19. sbit LCD_RW=P2^1;
  20. sbit LCD_EN=P2^2;
  21. sfr aaa=0x80;
  22. U8 code tab[] = {0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39};
  23. U8 dispbuf[4]={0,0,0,0};
  24. //void XSQ(void);
  25. void delay(unsigned char t) {
  26.     unsigned char i;
  27.     while(t--)
  28.         for(i = 200; i > 0; i--);
  29. }
  30. void LCD_write_instruction(unsigned char LCD_instruction) { //写指令到LCD
  31.     LCD_RS = 0;
  32.     LCD_RW = 0;
  33.     LCD_DATA = LCD_instruction;
  34.     LCD_EN = 1;
  35.     _nop_();
  36.     delay(1);
  37.     LCD_EN = 0;
  38.     //delay(10);
  39. }
  40. void LCD_write_data(unsigned char LCD_data) {         //输出一个字节数据到LCD
  41.     LCD_RS = 1;
  42.     LCD_RW = 0;
  43.     LCD_DATA = LCD_data;
  44.     LCD_EN = 1;
  45.      delay(1);
  46.     _nop_();
  47.     LCD_EN = 0;
  48.     delay(1);
  49. }
  50. void LCD_set_position(unsigned char x) {              //LCD光标定位到x处
  51.     LCD_write_instruction(0x80|x);
  52. }
  53. void LCD_printc(unsigned char lcd_data) {             //输出一个字符到LCD
  54.     LCD_write_data(lcd_data);
  55.   }
  56. void LCD_prints(unsigned char *lcd_string) {           //输出一个字符串到 LCD
  57.     unsigned char i = 0;
  58.     while(lcd_string[i] != 0x00) {
  59.         LCD_write_data(lcd_string[i]);
  60.         i++;
  61.     }
  62. }
  63. void LCD_initial(void) {                           //初始化 LCD
  64.     LCD_write_instruction(0x38);
  65.     LCD_write_instruction(0x0c);
  66.     LCD_write_instruction(0x06);
  67.     LCD_write_instruction(0x01);
  68. }
  69. void XSQ(void)
  70. {   
  71.      LCD_set_position(0x80);
  72.                            
  73.    while(1) {   
  74.       U8 temp1,temp2,temp3,temp4;
  75.       LCD_set_position(0x80);
  76.    LCD_prints(" NOW:   OF");
  77.                                LCD_set_position(0xC0); //LCD换行显示
  78.                               LCD_prints("Number:");   
  79.    
  80.                               // X1=X2=X3=X4=0;
  81.    LCD_initial();  
  82.    temp1=tab[dispbuf[0]];
  83.    temp2=tab[dispbuf[1]];
  84.    temp3=tab[dispbuf[2]];
  85.    temp4=tab[dispbuf[3]];
  86.    LCD_set_position(0xc9); //LCD换行显示
  87.             LCD_printc(temp1);
  88.    LCD_set_position(0xcA); //LCD换行显示
  89.             LCD_printc(temp2);
  90.    LCD_set_position(0xCB); //LCD换行显示
  91.             LCD_printc(temp3);  
  92.             LCD_set_position(0xCC); //LCD换行显示
  93.             LCD_printc(temp4);
  94.       }  
  95. }
  96. void InitTimer1(void)
  97. {  TMOD = 0x20;
  98.     TH1 = 0xFE;
  99.     TL1 = 0xFE;
  100.     EA = 1;
  101.     ET1 = 1;
  102.    //if(ksad==0){
  103.    // TR1 = 0;// }else{TR1=0;}
  104.   }

  105. void main(void)
  106. {adda=0;addb=1;addc=0;
  107.    InitTimer1();
  108.    LCD_initial();         
  109. TR1=1;   
  110.    while(1){
  111. OE=0;
  112. star=0;
  113.   star=1;
  114.           star=0;
  115. while(eoc==0);
  116.         { OE=1;
  117.   delay(1);
  118. getdata=P1;
  119.           OE=0;
  120.           dispbuf[0]=getdata/1000;
  121. dispbuf[1]=getdata%1000/100;
  122. dispbuf[2]=getdata%1000%100/10;
  123. dispbuf[3]=getdata%1000%100%10;}
  124.           //TR1=0 // aaa=getdata;
  125.          XSQ( );      // f=(5/256)*aaa*1000 ;
  126.                              LCD_set_position(0x80);
  127.    LCD_prints(" NOW:   OF");
  128.                                LCD_set_position(0xC0); //LCD换行显示
  129.                               LCD_prints("Number:");  }
  130.      }
  131. void Timer1Interrupt(void) interrupt 3
  132. {InitTimer1();  
  133.      ALE=~ALE;//add your code here!
  134.      //OE=~OE;
  135.      //delay(8);
  136.      //eoc=~eoc;
  137. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2019-8-22 22:19 | 只看该作者
给你改了,对比一下就知道哪里错了。

  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define U8 unsigned char
  4. #define U16 unsigned int
  5. #define LCD_DATA P0
  6. U8 getdata;
  7. U8 X1,X2,X3,X4;
  8. U8 f;
  9. sbit OE=P3^7;
  10. sbit star=P3^6;
  11. sbit eoc=P3^3;
  12. sbit ALE=P2^6;
  13. sbit stoid=P3^5;
  14. sbit adda=P2^3;
  15. sbit addb=P2^4;
  16. sbit addc=P2^5;
  17. sbit ksad=P3^0;
  18. sbit LCD_RS=P2^0;
  19. sbit LCD_RW=P2^1;
  20. sbit LCD_EN=P2^2;
  21. sfr aaa=0x80;
  22. U8 code tab[] = {0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39};
  23. U8 dispbuf[4]={0,0,0,0};
  24. //void XSQ(void);
  25. void delay(unsigned char t) {
  26.         unsigned char i;
  27.         while(t--)
  28.         for(i = 200; i > 0; i--);
  29. }
  30. void LCD_write_instruction(unsigned char LCD_instruction) { //写指令到LCD
  31.         LCD_RS = 0;
  32.         LCD_RW = 0;
  33.         LCD_DATA = LCD_instruction;
  34.         LCD_EN = 1;
  35.         _nop_();
  36.         delay(1);
  37.         LCD_EN = 0;
  38.         //delay(10);
  39. }
  40. void LCD_write_data(unsigned char LCD_data) {         //输出一个字节数据到LCD
  41.         LCD_RS = 1;
  42.         LCD_RW = 0;
  43.         LCD_DATA = LCD_data;
  44.         LCD_EN = 1;
  45.         delay(1);
  46.         _nop_();
  47.         LCD_EN = 0;
  48.         delay(1);
  49. }
  50. void LCD_set_position(unsigned char x) {              //LCD光标定位到x处
  51.         LCD_write_instruction(0x80|x);
  52. }
  53. void LCD_printc(unsigned char lcd_data) {             //输出一个字符到LCD
  54.         LCD_write_data(lcd_data);
  55. }
  56. void LCD_prints(unsigned char *lcd_string) {           //输出一个字符串到 LCD
  57.         unsigned char i = 0;
  58.         while(lcd_string[i] != 0x00) {
  59.                 LCD_write_data(lcd_string[i]);
  60.                 i++;
  61.         }
  62. }
  63. void LCD_initial(void) {                           //初始化 LCD
  64.         LCD_write_instruction(0x38);
  65.         LCD_write_instruction(0x0c);
  66.         LCD_write_instruction(0x06);
  67.         LCD_write_instruction(0x01);
  68. }
  69. void XSQ(void)
  70. {   
  71.         LCD_set_position(0x80);
  72.        
  73.         //while(1)
  74.                 {   
  75.                 U8 temp1,temp2,temp3,temp4;
  76.                 LCD_set_position(0x80);
  77.                 LCD_prints(" NOW:   OF");
  78.                 LCD_set_position(0xC0); //LCD换行显示
  79.                 LCD_prints("Number:");   
  80.                
  81.                 // X1=X2=X3=X4=0;
  82.                 //LCD_initial();  
  83.                 temp1=tab[dispbuf[0]];
  84.                 temp2=tab[dispbuf[1]];
  85.                 temp3=tab[dispbuf[2]];
  86.                 temp4=tab[dispbuf[3]];
  87.                 LCD_set_position(0xc9); //LCD换行显示
  88.                 LCD_printc(temp1);
  89.                 LCD_set_position(0xcA); //LCD换行显示
  90.                 LCD_printc(temp2);
  91.                 LCD_set_position(0xCB); //LCD换行显示
  92.                 LCD_printc(temp3);  
  93.                 LCD_set_position(0xCC); //LCD换行显示
  94.                 LCD_printc(temp4);
  95.         }  
  96. }
  97. void InitTimer1(void)
  98. {
  99.         TMOD = 0x20;
  100.         TH1 = 0xFE;
  101.         TL1 = 0xFE;
  102.         EA = 1;
  103.         ET1 = 1;
  104.         //if(ksad==0){
  105.         // TR1 = 0;// }else{TR1=0;}
  106. }

  107. void main(void)
  108. {
  109.         adda=0;addb=1;addc=0;
  110.         InitTimer1();
  111.         LCD_initial();         
  112.         TR1=1;   
  113.         while(1){
  114.                 OE=0;
  115.                 star=0;
  116.                 star=1;
  117.                 star=0;
  118.                 while(eoc==0);
  119.                 {
  120.                     OE=1;
  121.                         delay(1);
  122.                         getdata=P1;
  123.                         OE=0;
  124.                         dispbuf[0]=getdata/1000;
  125.                         dispbuf[1]=getdata%1000/100;
  126.                         dispbuf[2]=getdata%1000%100/10;
  127.                         dispbuf[3]=getdata%1000%100%10;
  128.                 }
  129.                 //TR1=0 // aaa=getdata;
  130.                 XSQ( );      // f=(5/256)*aaa*1000 ;
  131.                 LCD_set_position(0x80);
  132.                 LCD_prints(" NOW:   OF");
  133.                 LCD_set_position(0xC0); //LCD换行显示
  134.                 LCD_prints("Number:");  
  135.         }
  136. }
  137. void Timer1Interrupt(void) interrupt 3
  138. {
  139.         //InitTimer1();  
  140.         ALE=~ALE;//add your code here!
  141.         //OE=~OE;
  142.         //delay(8);
  143.         //eoc=~eoc;
  144. }

复制代码
回复

使用道具 举报

板凳
ID:600683 发表于 2019-8-29 10:21 | 只看该作者
谢谢,多道循环了。ADD还是不工作
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表