修改代码#include<reg51.h> sbit MCP_SCK=P1^0; sbit MCP_MISO=P1^1; sbit MCP_CS=P1^2; sbit qianw= P2^0; sbit baiw = P2^1; sbit shiw = P2^2; sbit wan = P2^3; sbit qian = P2^4; sbit bai = P2^5; sbit shi = P2^6; sbit ge = P2^7; unsigned char date[8];//数码管位选 unsigned char code tb[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; char code dx516[3] _at_ 0x003b; void delay(unsigned int j) { unsigned char i=250; for(;j>0;j--) { while(--i); i=249; while(--i); i=250; } } unsigned int read_MCP(void) { unsigned int temp = 0; unsigned char i; MCP_CS=1; delay(1); MCP_CS=0; MCP_SCK=0; for(i=0;i<13;i++) { MCP_SCK=1; temp<<=1; if(MCP_MISO == 1) temp |=0x01; MCP_SCK = 0; } MCP_CS=1; temp &=0x03FF; return temp; } char code dx516[3] _at_ 0x003b; void main() { unsigned int vt; unsigned int R; unsigned char i; P2 |=0xf0; switch(i) //位选,选择点亮的数码管, { case(0): P0 = date[0];qianw= 0;break; case(1): P0 = date[1];baiw = 0;break; case(2): P0 = date[2];shiw = 0;break; case(3): P0 = date[3];wan = 0;break; case(4): P0 = date[4];qian = 0;break; case(5): P0 = date[5];bai = 0;break; case(6): P0 = date[6];shi = 0;break; case(7): P0 = date[7];ge = 0;break; } i++; if(i==8) { i=0; } R=read_MCP; vt = 2.5*R/1024; //测量电压值 date[0] =tb[vt/1000]; date[1] =tb[vt/1000]; date[2] =tb[vt/1000]; date[3] =tb[vt/1000]; date[4] =tb[vt/100%10]; date[5] =tb[vt/10%10]; date[6] =tb[vt%10]; date[7] =0x0a; }
时间: 2023-10-25 15:09:05 浏览: 163
经过分析,该代码存在以下问题:
1. 在 switch 语句中使用了一个未定义的变量 i。
2. read_MCP 函数在调用时没有加上括号,应该为 R=read_MCP()。
3. 在位选数码管时,应该先将所有位选引脚置为高电平,然后再根据需要将某个位选引脚置为低电平,但是该代码在每个 case 语句中只将一个位选引脚置为低电平,没有将其他位选引脚置为高电平,因此会导致多个数码管同时点亮。
4. 在将测量得到的电压值转换为数码管显示的代码中,四个高位数码管的值赋值时都是 vt/1000,应该为 vt/10000、vt/1000、vt/100、vt/10。
5. 在 main 函数中,应该加上一个 while 循环或者定时器中断,以便实现数码管的动态显示。
修改后的代码如下:
相关问题
请为下面这段c语言代码每行写下注释,已经有的可以不用写:#include <REG52.H> #include <intrins.h> #define uchar unsigned char //宏定义方便以后用 #define uint unsigned int #define ulong unsigned long //定义ADC0832的借接口 sbit ADC_CS = P2^4; sbit ADC_Clk = P2^5; sbit ADC_DATI = P2^6; sbit ADC
#include <REG52.H> // 头文件,引入51单片机的寄存器定义
#include <intrins.h> // 头文件,引入51单片机的内置函数
#define uchar unsigned char // 宏定义,将 unsigned char 定义为 uchar ,方便代码中使用
#define uint unsigned int // 宏定义,将 unsigned int 定义为 uint ,方便代码中使用
#define ulong unsigned long // 宏定义,将 unsigned long 定义为 ulong ,方便代码中使用
sbit ADC_CS = P2^4; // 定义ADC0832芯片的借接口
sbit ADC_Clk = P2^5; // 定义ADC0832芯片的时钟接口
sbit ADC_DATI = P2^6; // 定义ADC0832芯片的数据输入接口
sbit ADC_DATO = P2^7; // 定义ADC0832芯片的数据输出接口
#include<reg52.h> sbit LED = P0^0; sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; void main() {unsigned int i = 0; ENLED = 0; ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; while(1) { LED = 0; for(i=0; i<30000; i++); LED = 1; for(i=0; i<30000; i++); } }
这是一段基于 8051 单片机的程序代码,用于控制 LED 灯的闪烁。具体来说,代码中定义了 LED 灯的控制引脚为 P0^0,地址线控制引脚 ADDR0、ADDR1、ADDR2、ADDR3 分别为 P1^0、P1^1、P1^2、P1^3,使能控制引脚 ENLED 为 P1^4。
程序的逻辑是,首先将地址线控制引脚 ADDR3、ADDR2、ADDR1 分别设置为 1,ADDR0 设置为 0,以确定 LED 灯的控制地址为 0x00(即 P0^0)。然后进入一个无限循环,不断地将 LED 灯控制引脚 P0^0 置为低电平和高电平,从而实现 LED 灯的闪烁效果。
需要注意的是,由于 ENLED 为使能控制引脚,其电平必须为低电平才能使 LED 灯正常工作。此外,程序中的延时是通过一个简单的循环实现的,具体延时时间取决于单片机的主频和循环次数,可能会存在误差。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![text/plain](https://img-home.csdnimg.cn/images/20250102104920.png)
![c](https://img-home.csdnimg.cn/images/20250102104920.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pptx](https://img-home.csdnimg.cn/images/20241231044947.png)