博客
关于我
51单片机 普中V2 DAC PCF8591 模拟电压输出 数码管 仿真
阅读量:363 次
发布时间:2019-03-04

本文共 2222 字,大约阅读时间需要 7 分钟。

2个按键控制DAC输出修改方案

系统简介

本方案采用LS138A系列芯片作为七段显示器控制器,通过I2C通信接口与主控器进行数据交互。系统主要功能包括读取AD通道电压值并通过DAC转换输出,同时支持四个按键进行控制操作。

主要硬件组成

  • 显示器控制器:LS138A、LS138B、LS138C
  • I2C通信模块
  • AD通道模块
  • 四个按键模块
  • 软件设计

    按键检测函数

    void delay_ms_key(unsigned char t) {
    unsigned char ttt;
    while (t--) {
    for (ttt = 0; ttt < 125; ttt++) ;
    }
    }
    unsigned char KeySscan(void) {
    unsigned char keyvaluee = 0xff;
    if (key_01 == 0) {
    delay_ms_key(10);
    if (key_01 == 0) {
    while (key_01 == 0) ;
    return(1);
    }
    }
    if (key_02 == 0) {
    delay_ms_key(10);
    if (key_02 == 0) {
    while (key_02 == 0) ;
    return(2);
    }
    }
    if (key_03 == 0) {
    delay_ms_key(10);
    if (key_03 == 0) {
    while (key_03 == 0) ;
    return(3);
    }
    }
    if (key_04 == 0) {
    delay_ms_key(10);
    if (key_04 == 0) {
    while (key_04 == 0) ;
    return(4);
    }
    }
    return(0xff);
    }

    主程序设计

    #include 
    #include
    sbit LS138A = P2 ^ 2;
    sbit LS138B = P2 ^ 3;
    sbit LS138C = P2 ^ 4;
    const unsigned char Disp_Tab[10] = {
    0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
    };
    unsigned char AD_CHANNEL;
    unsigned char LedOut[8];
    sbit key_01 = P3 ^ 0;
    sbit key_02 = P3 ^ 1;
    sbit key_03 = P3 ^ 2;
    sbit key_04 = P3 ^ 3;
    void main() {
    int adadadad = 0;
    unsigned char ad_value = 32;
    unsigned char anjianzhi = 0xff;
    TMOD = 0x11;
    EA = 1;
    TH0 = (65536 - 3000) / 256;
    TL0 = (65536 - 3000) % 256;
    ET0 = 1;
    TR0 = 1;
    LedOut[1] = Disp_Tab[ad_value % 100 / 10] | 0x80;
    LedOut[0] = Disp_Tab[ad_value % 10];
    while (1) {
    anjianzhi = KeySscan();
    if (anjianzhi != 0xff) {
    if (anjianzhi == 1) {
    ad_value++;
    DACconversion(PCF8591, 0x40, adadadad);
    } else if (anjianzhi == 2) {
    ad_value--;
    DACconversion(PCF8591, 0x40, adadadad);
    }
    LedOut[1] = Disp_Tab[ad_value % 100 / 10] | 0x80;
    LedOut[0] = Disp_Tab[ad_value % 10];
    }
    }
    }

    系统工作流程

  • 初始化I2C通信模块和AD通道模块
  • 设置初始AD值为32(可扩展)
  • 按键扫描并判断按键状态
  • 根据按键状态调整AD值并更新DAC输出
  • 实时显示AD值对应的七段显示器数字
  • 转载地址:http://suce.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现radianToDegree弧度到度算法(附完整源码)
    查看>>
    Objective-C实现radix sort基数排序算法(附完整源码)
    查看>>
    Objective-C实现rail fence围栏密码算法(附完整源码)
    查看>>
    Objective-C实现randomized heap随机堆算法(附完整源码)
    查看>>
    Objective-C实现rayleigh quotient瑞利商算法(附完整源码)
    查看>>
    Objective-C实现RC4加解密算法(附完整源码)
    查看>>
    Objective-C实现RC4加解密算法(附完整源码)
    查看>>
    Objective-C实现recursive bubble sor递归冒泡排序算法(附完整源码)
    查看>>
    Objective-C实现recursive insertion sort递归插入排序算法(附完整源码)
    查看>>
    Objective-C实现recursive quick sort递归快速排序算法(附完整源码)
    查看>>
    Objective-C实现RedBlackTree红黑树算法(附完整源码)
    查看>>
    Objective-C实现redis分布式锁(附完整源码)
    查看>>
    Objective-C实现regular-expression-matching正则表达式匹配算法(附完整源码)
    查看>>
    Objective-C实现relu线性整流函数算法(附完整源码)
    查看>>
    Objective-C实现restful api服务(附完整源码)
    查看>>
    Objective-C实现reverse letters反向字母算法(附完整源码)
    查看>>
    Objective-C实现ReverseNumber反转数字算法 (附完整源码)
    查看>>
    Objective-C实现ReversePolishNotation逆波兰表示法算法 (附完整源码)
    查看>>
    Objective-C实现RGB Hsv 转换算法(附完整源码)
    查看>>
    Objective-C实现RGB和HSV相互转换算法(附完整源码)
    查看>>