单片机课程设计报告


    


    单片机课程设计报告






    题 目 数字电压表
    班 级
    姓 名
    学 号
    指导老师
    设计时间
    1 方案设计证
    11 硬件总体设计
    设计制作基单片机数字电压表电路结构框图图 11 示





    单片机
    STC 89C52

    时钟电路
    复位电路

    测量电压输入
    PCF8591
    AD转换电路
    电压数码显示系统

    图11 硬件结构框图
    (1)单片机系统电路部分
    (2)数码显示部分
    (3) PCF8591芯片 AD转换部分
    (4)外部电压采集部分
    12软件总体设计
    良设计方案减少软件设计工作量提高软件通性扩展性读性系统设计方案步骤:
    (1)根需求系统功求逐级划分模块
    (2)明确模块间数流传递关系力求数传递少增强模块独立性便软件编制调试
    (3)确定软件开发环境选择设计语言完成模块功设计分调试通
    (4)开发式软件设计结构模块机结合起成较完善系统采 PCF8591芯片中AD转换器实现模拟量数字量转换单电源供电单片机模块采STC89C52单片机作系统控制单元通键选择相应档位控控制相应继电器选取模拟量输入通AD转换测值转换数字量送入单片机中单片机送显
    2 硬件设计
    21 电源电路
    设计电源部分采外部直流直接供电方案采DC插座连接器件电压值直流5V供电外部直流5V电输入时首先进行滤波处理减少直流电中交流部分系统提供稳定5V电源保证电路正常稳定工作

    图21 电源电路图
    22 显示电路
    显示电路4位阳数码4PNP型三极S85504限流电阻构成S8550数码段码驱动开关B极低电时三极导通B极高电时三极截止4三极B极受控单片机IO口三极E极接电源正三极导通时电源正极达数码阳极时数码8段点亮熄灭完全受控数码段码控制IO低电点亮数码中相应段

    图221 显示电路图


    图222 显示电路图
    23 单片机系统电路
    单片机系统复位电路晶振电路组成电路图:

    图231 单片机系统电路图
    复位电路键复位电复位两部分组成STC89C52系列单片高电复位通常复位引脚RST连接电容VCC连接电阻GND形成RC充放电回路保证单片机电时RST脚足够时间高电进行复位回低电进入正常工作状态电阻电容典型值10K10uF
    键复位复位电容联开关开关时电容放电RST拉高电电容充电会保持段时间高电单片机复位
    晶振电路晶振器件2助振电容组成晶体振荡器作振荡源单片机部带振荡电路外部连接晶振两电容电容容量般15pF50pF间 
    系统采部方式时钟电路加电复位复位电路图示:

    图232 时钟电路图 图233 复位电路图
    24 PCF8591芯片 AD转换部分电路
    PCF8591芯片模拟电压信号转化二进制数值I²C总线传送单片机单片机转换成十进制数值通数码显示PCF8591芯片AD转换部分电路图24示:

    图24 PCF8591芯片 AD转换部分电路图
    量程设置衰减例输入电阻总回路电阻值外部采集电压进电阻进行衰减降 PCF8591 芯片基准采集电压范围
    PCF85918位 DA采串行数模转换器4路采样通道设计采样温度电压需2采样通道PCF8591单片机通迅方便简单PCF85914采集通道分AIN0AIN1AIN2AIN3AIN3电压检测通道检测输入端电压单片机处理PCF8591发送数计算出相应电压值数码显示出
    TL431调稳压芯片图接法典型25V接法需调电阻方便简单25VR4电阻C5组合成RC滤波然供PCF8591做基准电压知道PCF85918位ADDA芯片8位256量果25V做基准话分辨量25V(2561) 约等 98mVPCF8591检测量98mV检测电压值
    RW高精密调电阻称电压校正电阻作调整输入电压分压输入电压般准电压输入电压进行分压处理然程序里进行原处理
    3 软件设计
    31 程序
    系统程序包括PCF8591AD转换模块电压计算数码显示程序通调函数实现系统总体功工作序:
    (1)系统启动进行系统初始化
    (2)读取 PCF8591芯片值判断值否超电压通数码显示
    (3)果超量测量电压显示OL表示超量程没超显示相应电压值
    程序程序流程图图 31示
    程序开始
    初始化
    循环30次读取AD结果
    AD结果30均值
    AD结果值?
    电压值计算
    显示电压
    显示超量程
    N
    Y

    图 31 程序程序流程图
    32 PCF8591AD转换程序设计
    电压表测量通 PCF8591ADDA转换芯片实现硬件电路设计中已做设计现设计 PCF8591ADDA转换芯片软件部分
    AD转换流程图
    子程序初始化
    I2C初始条件
    写入器件址(写)
    发送控制字
    检测应答信号
    I2C初始条件
    写入器件址(读)
    检测应答信号
    接收数存入指针址
    结束

    图32 AD转换流程图
    AD系统程序设计包括三部分:总线初始化程序启动信号程序应答信号程序停止信号程序写字节程序读字节程序
    4 安装调试
    41 电路安装
    (1)检查元件坏
    电路图买元件首先检查买回元件坏元件检测方法分进行检测定仔细认真认真核原理图否致检查件焊件防止出现错误焊件便改正
    (2)放置焊接元件
    原理图位置放置元件放置程中先放置焊接较低元件焊较高求较高元件特容易损坏元件焊焊集成芯片时连续焊接时间超10s注意芯片安装方
    42 系统调试
    (1)Keil软件中编写调试程序修改语法错误终生成hex目标程序
    (2)利Proteus软件绘制电路图确保电路连接正确误情况载入目标程序仿真查结果图41示

    图41仿真图
    5 性测试结果分析
    STCISP软件烧入目标程序观察实物运行效果导线接纽扣电池正负端电压测量效果图51示实验测试该数字电压表设计方案正确行项指标稳定

    图51实物运行效果
    6 心体会
    通次设计仅单片机门课程更深刻认识懂运课知识结合实际完成定时器显示编程方法数码显示电路驱动方法够快适应现代控制技术发展需求时提高思维力实际操作力更走工作岗位奠定坚实基础外次设计更进步认识关 STC89C52等芯片引脚功方法学会应芯片配合完成整设计操作做硬件电路段时间里思考设计电路调试许困难样软件进行设计时路坎坷通软硬件断撞墙断思考解决问题程中学会东西时单片机更深认识

    参考文献:
    [1] 王福瑞.单片机测控系统设计全[M] .北京北京航空航天学出版社2000
    [2] 谭浩强.C程序设计[M].北京:清华学出版社2007
    [3] 丁元杰.单片机原理应[M] .北京 机械工业出版社2003



    附录:
    1 电路图






    2 实物图(正反面)



    3 源程序
    #include 包含头文件
    #define setPcf8591Add 0x90 定义PCF859器件址

    sbit SCL P2^6 定义PCF859时钟IO口
    sbit SDA P2^7 定义PCF859数IO口

    *样做处意改IO段码应关系(方便洞洞板接线)*
    sbit LED1 P3^7 定义第1数码位选
    sbit LED2 P3^6 定义第2数码位选
    sbit LED3 P1^2 定义第3数码位选
    sbit LED4 P1^1 定义第4数码位选
    sbit LED_a P3^5 定义数码段选a段
    sbit LED_b P1^3 定义数码段选b段
    sbit LED_c P3^0 定义数码段选c段
    sbit LED_d P3^2 定义数码段选d段
    sbit LED_e P3^3 定义数码段选e段
    sbit LED_f P3^4 定义数码段选f段
    sbit LED_g P1^7 定义数码段选g段
    sbit LED_dp P3^1 定义数码段选dp段


    *数显段码存放数组里数组标应*
    unsigned char dig[10] {0x030x9f0x250x0d0x990x490x410x1f0x010x09}
    0 1 2 3 4 5 6 7 8 9段码

    *数码显示暂存数组*
    unsigned char ledData[] {0xff0xff0xff0x03}
    第3位第2位第1位第0位

    *数码显示函数*
    void led_out(void)
    {
    unsigned char ij
    for(i 0i < 4i++) for循环4次i03循环4次次扫描4数码
    {
    *关全部位选*
    LED1 1 数码位选1位关
    LED2 1 数码位选2位关
    LED3 1 数码位选3位关
    LED4 1 数码位选4位关
    *输入显示数组里段码*
    LED_a ledData[i] & 0x80 数码段选a段输出暂存数组里相应数
    LED_b ledData[i] & 0x40 数码段选b段输出暂存数组里相应数
    LED_c ledData[i] & 0x20 数码段选c段输出暂存数组里相应数
    LED_d ledData[i] & 0x10 数码段选d段输出暂存数组里相应数
    LED_e ledData[i] & 0x08 数码段选e段输出暂存数组里相应数
    LED_f ledData[i] & 0x04 数码段选f段输出暂存数组里相应数
    LED_g ledData[i] & 0x02 数码段选g段输出暂存数组里相应数
    LED_dp ledData[i] & 0x01 数码段选dp段输出暂存数组里相应数
    *判断开位选*
    if(i 0) 判断显示位置
    LED1 0 果前扫描第1数码位选开显示数
    else if(i 1) 果前扫描第2数码位选开显示数
    LED2 0
    else if(i 2) 果前扫描第3数码位选开显示数
    LED3 0
    else if(i 3) 果前扫描第4数码位选开显示数
    LED4 0
    for(j 0j < 240j++) 延时段时间
    *关全部位选*
    LED1 1 数码位选1位关
    LED2 1 数码位选1位关
    LED3 1 数码位选1位关
    LED4 1 数码位选1位关
    }
    }

    *
    函数名 I2C通迅延时
    调 调函数
    参 数 参数
    返回值 返回值
    备 注 I2C单片机通迅相慢时序延时
    *
    void delay(unsigned char time) 延时
    {
    for(time > 0time)
    }

    *
    函数名 I2C起始条件
    调 调函数
    参 数 参数
    返回值 返回值
    备 注 SCL高SDA降做起始条件(5V时高06us低06us)
    *
    void i2c_start(void) I2C起始条件
    {
    SDA 1 SDA输出高电(注意SCL需SDA面拉高果外部已拉低SCLSDA拉高着停止条件)
    delay(5) 延时
    SCL 1 SCL输出高电
    delay(5) 延时
    SDA 0 SDA降
    delay(5) 延时
    SCL 0 SCL输出高电
    delay(5) 延时
    }

    *
    函数名 I2C停止条件
    调 调函数
    参 数 参数
    返回值 返回值
    备 注 SCL高SDA升做停止条件
    写函数思想1产生停止条件必须SDA产生1升产生升前SDA须低
    2正常停止信号ACK应答产生考虑应答非应答先拉低SCL允许
    SDA确保低拉高SCL满足1条件
    *
    void i2c_stop(void) I2C停止条件
    {
    SCL 0 允许SDA低
    delay(5) 延时
    SDA 0 SDA输出低电
    delay(5) 延时
    SCL 1 SCL输出高电
    delay(5) 延时
    SDA 1 SDA升
    delay(5) 延时
    }
    *
    函数名 回复应答者非应答信号
    调 调函数
    参 数 ACKsw应答开关0时表示应答1表示非应答
    返回值 返回值
    备 注
    *
    void i2c_ACK(bit ACKsw) 回复应答者非应答信号0时表示应答1表示非应答
    {
    SCL 0 拉抵SCL允许SDA变化
    delay(5) 延时
    SDA ACKsw 应答信号传输SDA
    delay(5) 延时
    SCL 1 拉高SCLI2C读取
    delay(5) 延时
    SCL 0 拉低SCL允许外部改变SDA
    delay(5) 延时
    }
    *
    函数名 检测应答信号
    调 调函数
    参 数 参数
    返回值 返回值应答0表示应答1表示非应答
    备 注 发送完8数位发送1SCL检测I2C否应答
    *
    bit i2c_waitACK(void) 检测应答信号
    {
    SCL 0 拉低SCL允许SDA改变
    delay(5) 延时
    SDA 1 接收低电先拉高SDA电
    delay(5) 延时
    SCL 1 发送1SCL高准备检测SDA数
    delay(30) 延时
    if(SDA 1) 检测SDA数
    {
    SCL 0 拉低SCL准备退出允许外部改变SDA
    delay(5) 延时
    return 1 果读应答应位1说明I2C没应答
    }
    else
    {
    SCL 0 拉低SCL准备退出允许外部改变SDA
    delay(5) 延时
    return 0 果读应答应位0说明I2C回复应答
    }
    }

    *
    函数名 I2C位发送
    调 调函数
    参 数 dat发送8位数
    返回值 返回值
    备 注 传输1字节数8位
    *
    void i2c_sendbyte(unsigned char dat)I2C位发送
    {
    unsigned char i 定义1变量循环发送数位

    SCL 0 SCL输出低电允许数改变
    delay(5) 延时
    for(i 0i < 8i++) 循环8次发送1数8位
    {
    if(dat & 0x80) 果发送数高位1
    SDA 1 传输位1
    else
    SDA 0 否传输0
    dat << 1 传输数移高位方便次发送
    delay(5) 延时
    SCL 1 SCL输出高电I2C读数
    delay(5) 延时
    SCL 0 SCL输出低电允许改变数
    delay(5) 延时
    }
    }
    *
    函数名 I2C读取8位
    调 调函数
    参 数 参数
    返回值 返回读取8位数
    备 注 读取1字节数8位
    *
    unsigned char i2c_recbyte(void) I2C读取8位
    {
    unsigned char i 定义1变量循环接收数位
    unsigned char readDat 定义1变量暂存接收数

    readDat 0 暂存初值0
    SCL 0 SCL输出低电允许数改变(时序函数结束时应保持SCL低电)
    SDA 1 果接收数必须释放数总线SDA
    delay(5) 延时
    for(i 0i < 8i++) 循环8次接收1数8位
    {
    SCL 1 SCL拉高电24C输出数位
    delay(30) 延时
    readDat << 1 24C传输数高位前必须左移1位空位接收新数位
    if(SDA 1) 果读数1
    readDat++ 暂存低位置1
    SCL 0 SCL输出低电允许改变数
    delay(5) 延时
    }
    return readDat 返回读取字节
    }

    *
    函数名 读AD转换值
    参 数 com值AD转换控制字具体查PCF8591手册控制字寄存器功说明
    dat转换值指针变量变量址传函数函数转换
    改变传址变量值假传A变量址函数转换成功AD转换结果存入A变量址
    判断函数转换成功直接A值
    返回值 返回1说明转换失败
    备 注 读取AD转换次结果
    *
    bit i2c_readbyte(unsigned char com unsigned char *dat)
    {
    i2c_start() I2C起始条件
    i2c_sendbyte(setPcf8591Add) I2C写入器件址(写)
    if (i2c_waitACK()) 检测应答信号果非应答返回1结束函数
    return 1

    i2c_sendbyte(com) 果器件址通发送控制字节
    if (i2c_waitACK()) 检测应答信号果非应答返回1结束函数
    return 1

    i2c_start() I2C起始条件
    i2c_sendbyte(setPcf8591Add+1) I2C写入器件址(读)
    if (i2c_waitACK()) 检测应答信号果非应答返回1结束函数
    return 1

    *dat i2c_recbyte() 读取数
    i2c_ACK(0) 读字节数发送ACK信号
    i2c_stop() 发送停止信号
    return 0 返回0说明转换成功
    }

    *定时器0初始化*
    void Init_Timer0(void)
    {
    TMOD | 0x01 模式116位定时器|符号定时器时受影响
    TMOD & 0xF0 设置定时器模式
    TL0 0x00 设置定时初值
    TH0 0x00 设置定时初值
    EA 1 总中断开
    ET0 1 定时器中断开
    TR0 1 定时器开关开
    }

    *定时器中断子程序*
    void Timer0_isr(void) interrupt 1
    {
    TMOD & 0xF0 设置定时器模式
    TL0 0x00 设置定时初值
    TH0 0x00 设置定时初值
    led_out() 扫描数码显示电压值
    }

    *函数*
    void main(void)
    {
    unsigned char ans i 0 声明1变量延时计数1变量存AD中间结果
    unsigned int V 0 声明1变量存储计算电压值
    unsigned char pcf_dat 0 AD转换成功存入变量
    Init_Timer0() 定时器0初始化

    while(1) 循环
    {
    V 0
    for(i 0i < 30i++) 次读30次结果
    {
    if(i2c_readbyte(0X43&ans) 0) 果转换成功0X43选择通道3输入
    pcf_dat ans 转换结果存入pcf_dat变量
    V + pcf_dat 读结果全部累加int变量中存储
    }
    pcf_dat V 30 求均值变量pcf_dat
    if(pcf_dat 255) 果转换结果达255显示OL表示超量程
    {
    ledData[3] 0xff 显示关
    ledData[0] 0xff 显示O
    ledData[1] 0x03 显示L
    ledData[2] 0xe2 显示关
    }
    else 果没达满量程
    {
    V 47 * pcf_dat 计算出电压值47mV1转换结果47mV12V量程分255量1量47mV255量12V
    V 10 10表示mV保留2位数精确V数2位
    ledData[3] dig[V 10] 显示转换结果数点位位
    ledData[2] dig[(V 10) 10] 显示转换结果数点位二位
    ledData[1] dig[(V 100) 10]1 显示转换结果电压V显示数点
    if((V 1000) 10 0) 果V十位0关闭显示
    ledData[0] 0xff
    else
    ledData[0] dig[(V 1000) 10] 否显示电压十位数
    }
    }
    }
    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 10 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    单片机课程设计实习报告

    单片机课程设计实习报告  实训任务:  做单一灯的左移右移,八个发光二极管l1-l8分别接在单片机的p1.0→p1.2→p1.3┅→p1.7→p1.6→┅→p1.0亮,重复循环3次。然后左移2...

    11年前   
    816    0

    单片机课程设计报告基于单片机的温控系统

    职业学院机械与电子工程学院基于单片机温控系统课程设计报告班 级 电信班 学生姓名 学 号 指导教...

    3年前   
    993    0

    基于51单片机的定时闹钟设计单片机课程设计

    单片机 课 程 设 计 报 告 院系: 信息工程学院 ...

    2年前   
    492    0

    单片机简易电子琴单片机课程设计

    XX学院课程设计报告课程名称:单片机原理及应用课程设计设计题目: 电子琴设计 系 别: 通信与控制工程系 专 ...

    2年前   
    491    0

    单片机课程设计心得(精选多篇)

    单片机课程设计心得(精选多篇)第一篇:单片机课程设计心得单片机课程设计实训体会两周的单片机课程设计实训 ,真是让我们受益匪浅,学到了很多东西,不管怎么样,先感谢学校给我的这么多机会.真正的学到...

    9年前   
    674    0

    单片机原理及应用课程设计

    单片机课程设计数字音频频率测试仪班级:电气姓名:学号:日期:2010年X月X日 目录一、课程设计要求···········································1软硬...

    3年前   
    803    0

    单片机与微机原理课程设计

    一、课程设计(论文)的内容(1)设计并绘制硬件电路图;  (2)购买电子元器件并按电路图焊接到电路板上;   (3)编写程序并将调试好的程序固化到单片机中。

    3年前   
    850    0

    可控流水灯设计(单片机课程设计报告)汇编语言

    单片机课程设计报告题 目: 可控流水灯 摘要单片机是一种集成电路芯片,采用超大规模技术,把具有数据处理能力的微处理器、随机存取数据存储器、只读程序存储器、输入输出电路、可能还包括...

    1年前   
    446    0

    单片机课程设计作息时间控制器的设计报告

    XX大学单片机课程设计报告作息时间控制器设计姓 名: 学 号: 专业班级: 自动化班 指...

    3年前   
    561    0

    51单片机秒表计时器课程设计报告(含C语言程序)课程设计

    XXXXXX学院 51单片机系统设计 课程设计报告题 目: 秒表系统设计 专业、班级: 学...

    2年前   
    441    0

    基于单片机的温湿度控制器设计课程设计报告

    《智能仪器仪表设计与调试》课程设计报告 学 院: 电气与信息工程学院 专业班级: 测控10-01 学生姓名: 学 ...

    1年前   
    305    0

    基于单片机的交通灯显示系统的设计与研究课程设计

     XX学院课程设计课 程 单片机课程设计 题 目 交通灯系统 院 系 机电系 ...

    3年前   
    901    0

    2023单片机课程设计心得体会3500字

    单片机课程设计心得体会3500字  又是学期了,计算机专业的各种实训和课程设计,那么心得体会怎么写?下面是范文网整理的四篇关于单片机课程设计心得体会范文,希望对你有帮助!  【篇一:单片机课程...

    5个月前   
    147    0

    红外遥控音乐播放器单片机课程设计

     单片机课程设计 项目名称 红外遥控音乐播放器设计 专业班级 通信X班 学生...

    5年前   
    1290    0

    基于单片机的遥控窗帘课程设计

    《单片机应用与仿真训练》设计报告基于单片机的遥控窗帘设计姓 名: 学 号: ...

    1年前   
    292    0

    基于单片机的自动节水灌溉系统课程设计

     数理与信息工程学院应用系统设计 题 目: 基于单片机的自动节水灌溉系统 专 业: 计算机科学与技术(专升本) 班 级: ...

    3年前   
    609    0

    基于单片机的拔河游戏机设计课程设计

    ××大学××学院××课程设计基于单片机的拔河游戏机设计学生姓名学 号所 在 系专业名称班 级指导教师成 绩 ...

    3年前   
    585    0

    2023单片机课程设计心得体会(实训)

    20XX年单片机课程设计心得体会(实训)  【篇一】  随着电子技术的发展,特别是随着大规模集成电路的产生,给人们的生活带来了根本性的变化,如果说微型计算机的出现使现代的科学研究得到了质的飞跃...

    6个月前   
    151    0

    基于单片机的数字温度计设计课程设计

    基于单片机的数字温度计设计引言随着现代信息技术的飞速发展和传统工业改造的逐步实现.能够独立工作的温度检测和显示系统应用于诸多领域。传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的成本低,但需...

    3年前   
    934    0

    单片机课程设计心得体会

    单片机课程设计心得体会  做了两周的课程设计,有很多的心得体会,有关于单片机方面的,更多的是关于人与人之间关系方面的。   我们组一共有三个人,但其他两个人是真的神龙见首不见尾,除了在最后答辩...

    9年前   
    483    0

    文档贡献者

    文***享

    贡献于2019-09-12

    下载需要 10 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档