完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
数码管显示的直流电压检测电路设计,单片机课设题目,需要程序,原理图,连线方法,用的芯片是12C5A16S2,跪请各位大神帮忙,谢谢。a) 设计实现功能
STC12C5A60S2(引脚排序及基本功能同AT89S51)作为主控芯片,设计0-5V直流电压检测电路。一是利用单片机内部的A/D转换器测量外接直流电压;二是利用数码管显示当前信号的电压值;三是根据不同的电压大小控制发光管点亮指示。 b) 原理图设计 1.原理图设计要符合项目的工作原理,连线要正确。 2.图中所使用的元器件要合理选用,电阻、电容等器件的参数要正确标明。 3.原理图要完整,CPU、外围器件、外扩接口、输入/输出装置要一应俱全。 c) 程序调计 1.根据要求,将总体功能分解成若干个子功能模块,每个功能模块完成一个特定的功能。 2.根据总体要求及分解的功能模块,确定各功能模块之间的关系,设计出完整的程序流程图。 d) 程序调试 1.编写相关程序,并进行仿真。 2.将程序下载到单片机,进行运行调试。 e) 设计说明书 1.原理图设计说明 简要说明设计目的,原理图中所使用的元器件功能及在图中的作用,各器件的工作过程及顺序。 2.程序设计说明 对程序设计总体功能及结构进行说明,对各子模块的功能以及各子模块之间的关系作较详细的描述。 3.画出工作原理图,程序流程图并给出相应的程序清单。 帮帮忙,各位大神 |
|
相关推荐
7个回答
|
|
你直接让人家帮你做毕设不就完了,这根本不是在求学
|
|
|
|
自己做一下,我之前的和这个差不多,
|
|
|
|
这个确实能锻炼到你,
先做硬件和仿真,把硬件电路图画出来, 在用proteus仿真下, 然后开始用c编程(看下单片机书); 有自己的计划和步骤,再问问老师 ,没问题的! |
|
|
|
|
|
|
|
嗯,谢谢,等我做出来,我们公共探讨一下,谢谢你的鼓励 |
|
|
|
|
|
#include "reg51.h" #include "intrins.h" #include"absacc.h" #include"math.h" typedef unsigned char BYTE; typedef unsigned int WORD; ***it led=P1^1; //声光报警控制端 BYTE code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极0~9 BYTE code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//共阳极0.~9. /* AD 转换寄存器 */ sfr P1ASF = 0x9D; //P1 口功能控制寄存器 sfr ADC_CONTR = 0xBC; //AD 控制寄存器 sfr ADC_RES = 0xBD; //AD 转换结果高位 sfr ADC_RESL = 0xBE; //AD 转换结果低位 sfr AUXR1 = 0xA2; //AD 转换结果寄存器 #define ADC_POWER 0x80 //AD 转换电源开启 #define ADC_FLAG 0x10 //AD 转换标志位 #define ADC_START 0x08 //AD 转换开始位 #define ADRJ1 0x40 //AD 转换结果:高2 位+低8 位 #define ADC_SPEEDLL 0x00 //AD 转换速度控制,540 个时钟周期 #define ADC_SPEEDL 0x20 //AD 转换速度控制,360 个时钟周期 #define ADC_SPEEDH 0x40 //AD 转换速度控制,180 个时钟周期 #define ADC_SPEEDHH 0x60 //AD 转换速度控制,90 个时钟周期 unsigned char AD_val_h; //AD 转换结果高位 unsigned char AD_val_l; //AD 转换结果低位 unsigned long AD_val; float AD_float; void InitADC(); void SendData(BYTE dat); //void GetADCResult(BYTE ch); void Delay(WORD n); void Delay2(WORD n); void ShowResult(BYTE ch); /********************************************************* *延时n微秒程序 **********************************************************/ void DelayXus(WORD n) { while(--n); } void GetADCResult(BYTE ch) //AD 转换 { AUXR1 &=~ADRJ1; ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START; _nop_(); _nop_(); _nop_(); _nop_(); while(!(ADC_CONTR & ADC_FLAG)); ADC_CONTR &=~ADC_FLAG; AD_val_h=ADC_RES; AD_val_l=ADC_RESL; AD_val=AD_val_h*4+AD_val_l; } void InitADC() { P1ASF=0xff; ADC_RES=0; ADC_CONTR=ADC_POWER|ADC_SPEEDLL; Delay(1); } void Delay(WORD n) { WORD x; while(n--) { x=500; while(x--); } } void Delay2(WORD n) { WORD x; while(n--) { x=5000; while(x--); } } void display(float f1) { BYTE qian,bai,shi,ge; WORD f; f=f1*1000; qian=(int)f/1000; bai=(int)f/100%10; shi=(int)f/10%10; ge=(int)f%10; P2=0xf7; P0=table1[qian]; WR=0; Delay(5); P0=0XFF; WR=1; P2=0xfb; P0=table[bai]; WR=0; Delay(5); P0=0XFF; WR=1; P2=0xfd; P0=table[shi]; WR=0; Delay(5); P0=0XFF; WR=1; P2=0xfe; P0=table[ge]; WR=0; Delay(5); P0=0XFF; WR=1; } void main() { SP=0x60; InitADC(); AUXR1 &=~ADRJ1; while(1) { GetADCResult(0); AD_float=AD_val*5.0/1024.0; display(AD_float); if(AD_float>4.0) {led=0;} else led=1; if(AD_float>=3.0&&AD_float<4.0) P0=0xf0; if(AD_float>=2.0&&AD_float<3.0) P0=0xf8; if(AD_float>=1.0&&AD_float<2.0) P0=0xfc; if(AD_float>=0.0&&AD_float<1.0) P0=0xfe; //Delay2(10); }display(AD_float); } 还是之前的那个课设,这是我写的程序,但有点小问题,能帮忙看看不 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
19 浏览 0 评论
293 浏览 0 评论
为什么在频率为10^3 Hz处,产生的相移就可以确定约为-90度
1385 浏览 1 评论
【高手问答】电路的功能是为了0.6v到40v之间调压,运放发热严重
3650 浏览 8 评论
USB3.0 工业相机的传输速率是否受到电脑主板某些硬件的限制?
1251 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 15:45 , Processed in 0.805294 second(s), Total 90, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号