嘿嘿

烈酒焚心 提交于 2019-12-05 03:48:39
附录1:C语言程
#include<reg52.h>
 //对P1口定义
sbit d1=P1^6; 
sbit key1=P1^7;
sbit cs=P1^2;
sbit clk=P1^3;
sbit din=P1^1;
sbit dout=P1^0;
//
#define uchar unsigned char
#define uint unsigned int
uchar a,x,y,z,date,temp;
uchar conword,qian=1,shi,ge,key;     
uint dianya,temp1;
//制做LED显示查询表
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极个位数码管段码表
uchar code table2[]=
{0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //共阴极十位和小数数码管点显示表
uchar code table3[]={0x04,0x14,0x24,0x34,0x44,0x54,0x64,0x74,0x84,0x94,0xA4};//tcl2543初始化通道号表
bit cy;
sbit bit7=B^7;
void display(qian,shi,ge);//宏定义
void delay(z);
void jp();
void daout();
//主函数
void main()
{ 
    
    a=0;
    key=0;
    while(1)
    {
    
        daout();//初始化调用
        jp();//键盘扫描子程序调用
        display(qian,shi,ge);//显示调用
    }        
}

//键盘扫描子程序,九通道切换
void jp()
{    

    //a=1;
    if(key1==0)//去除按键抖动
    {
        delay(20);
        if(key1==0) //通道增 通过按键来选择通道可选范围为0-9
        {
            a++;
            if(a==10)
            a=0;
            key++;
            if(key==10)
            key=0;
        }
        while(!key1);
    }
    if(d1==0)
    {
        delay(20);
        if(d1==0)// 通过按键来实现对通道号逆选,即通道递减
        {
            a--;
            if(a==-1)
            a=9;
            key--;
            if(key==-1)
            key=9;
        }
        while(!d1);
    }
   qian=a;
}

//延时子程序
void delay(z)
{
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

//显示子程序
void display(qian,shi,ge)
{    
       P2=0xfe;//选中qian位
    P3=table[qian];// 送qian位段码即显示通道号
    delay(5);//延时
     P2=0xff;
    P2=0xfb;//选中十位    
    P3=table2[shi];//显示测得的电压值
    delay(5);
    P2=0xff;
    P3=0xff;
    P2=0xf7;//选中个位
    P3=table[ge];//显示个位
    delay(5);
    P2=0xff;
    P3=0xff;
    delay(5);
}
 //对TCL2543AD数据采集进行初始化子程序
void daout()
{
        char i;
        uchar value=0;
        conword=table3[key];//对TCL2543初始化    
        cs=1;//对TCL2543清零 cs由高到低有效
        cs=0;
        clk=0;//TCL2543在时钟脉冲下将采集数据输出
        B=conword;
        for(i=8;i>0;i--)//对2543输入控制字并获取输出值
            {    
                cy=dout;
                din=bit7;
                clk=1;
                B=B<<1;//左移
                clk=0;
                value=value<<1;
                if(cy==1) 
                    value++;    
            }
  //二十进制转换子程序
    dianya=value*5;
    cs=1;
    shi=dianya/256;//对获得的二进制数处理,转换成十进制数并处理为列表值
    temp=dianya%256;
    temp1=temp*10;
    ge=temp1/256;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!