为什么proteus仿真时数码管没显示结果? 120
//实验名:可调恒流源电路设计//采用STC10F08XE单片机//输出电流范围2~20mA,最小刻度0.5mA,精度0.01mA//恒流源部分由MC34063芯片构成,...
//实验名:可调恒流源电路设计//采用 STC10F08XE 单片机//输出电流范围2~20mA,最小刻度0.5mA,精度0.01mA//恒流源部分由MC34063芯片构成,经滑动变阻器改变电流大小//***********************************************************************************************#include <REG51.H> #include <intrins.h> #include <math.h>#define uint unsigned int #define uchar unsigned char #define AD_Data P1 sbit AD_CS = P3^4; sbit AD_RD = P3^5; sbit AD_WR = P3^6; sbit AD_INTR = P3^7; unsigned char data dis_digit,dis_index; uchar code dis_code[]={ 0xC0,/*0*/ 0xF9,/*1*/ 0xA4,/*2*/ 0xB0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xF8,/*7*/ 0x80,/*8*/ 0x90,/*9*/0x88,/*10*/0x83,/*11*/0xc6,/*12*/0xa1,/*13*/0x86,/*14*/0x8e,/*15*/}; //0-9 off unsigned char data dis_buf[8]; uchar BF,SF,GW,SW,a=0; uint Data; /*************启动AD转换子程序*************/void AD_Start(void) { AD_CS=0; //允许进行A/D转换AD_WR=0; _nop_(); AD_WR=1; //WR由低变高,此时AD开始转换while(AD_INTR); //查询转换结束产生INTR信号(低电平有效) //DelayMs(1);AD_CS=1; //停止AD转换} /*************读取A/D数据子程序*************/AD_Read() { AD_Data=0xff; AD_CS=0; //允许读取AD_RD=0; //读取转换数据结果_nop_(); Data=AD_Data; //数据存储到Data中AD_RD=1; AD_CS=1; //停止A/D数据读取return(Data); }void Data_Process() { BF=39*Data%10; SF=39*Data/10%10; GW=39*Data/100%10; SW=39*Data/1000%10; dis_buf[0] = dis_code[BF]; dis_buf[1] = dis_code[SF]; dis_buf[2] = dis_code[GW]&0x7f; dis_buf[3] = dis_code[SW]; } void timer0() interrupt 1 { a++; if(a%5==1) { EA=0; TH0 = 0x00; TL0 = 0x00; AD_Start(); AD_Read(); Data_Process(); EA=1; } ;} void timer1() interrupt 3 //定时器0,中断服务程序,用于数码管的动态扫描//dis_index,显示索引,用于标识当前显示的数码管和缓冲区的偏移量//dis_digit,位选通值,传送至P2口用于选通当前数码管的数值,如等于0xfe时//选通P2.0口数码管//dis_buf,显示缓冲区基地址{ TH1 = 0xFC; TL1 = 0x17; P2 = 0xff;//关闭所有数码管 P0 = dis_buf[dis_index];//显示代码传送到P0口P2 = dis_digit; dis_digit = _crol_(dis_digit,1); //位选通值左移,下次中断时选通下一位数码管dis_index++; dis_index &= 0x03; }//数码管全部扫描完一遍后,回到第一个重新开始扫描 /*************主函数入口*************/void main() { P0 = 0xff; P2 = 0xff; TMOD = 0x11; TH0 = 0xDC; TL0 = 0x17; TH1 = 0xFC; TL1 = 0x17; EA = 1; ET0 = 1; ET1 = 1; dis_buf[0] = dis_code[0x0]; dis_buf[1] = dis_code[0x0]; dis_buf[2] = dis_code[0x0]; dis_buf[3] = dis_code[0x0]; dis_digit = 0xfe; dis_index = 0; TR0 = 1; TR1 = 1; while(1) { }; } /*************程序结束*************/
展开
2个回答
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是一种由意法半导体(STMicroelectronics)公司设计和生产的单片机系列,广泛用于嵌入式系统、物联网(IoT)设备、汽车电子、工业自动化等领域。STM32具有以下优点:1. 低功耗:STM32单片机通常具有较低的功耗,...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询