• 基于51单片机数码管显示经ADC0808转化1K电位器分压5V模拟量为数字量的项目工程


    #include<reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    sbit START=P1^0;//启动信号
    sbit EOC=P1^1;//转换结束信号 
    sbit ENA=P1^2;//输出使能
    sbit CLK=P1^3;//时钟信号
    uchar temp; 
    uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管段码表,高电平段导通,低电平位导通。
      void DelayMS(uint t)
    {
       uchar i;
       while(t--)
        for(i=0;i<120;i++);
      }
      void Display_Result(uchar temp)
    {
       P2=0xfe;//第1个数码管显示个位数
       P0=DSY_CODE[temp/100];
       DelayMS(1);
       P0=0x00;
       P2=0xfd;//第2个数码管显示十位数 
       P0=DSY_CODE[temp%100/10];
       DelayMS(1);
       P0=0x00;
       P2=0xfb;//第3个数码管显示百位数
       P0=DSY_CODE[temp%10];
       DelayMS(1);
       P0=0x00;
      }
      void main()
    {
       TMOD=0x02;//T1工作模式2
       TH0=0x14;//十六进制0x14转化为十进制数为20,20为装入定时器初始值,按12MHz晶振算,那么256-20=236就是计时时间,即定时时间为236微妙,即0.236毫秒,亦0.000236秒。
       TL0=0x00;//低8位定时计数寄存器从0开始计数,计满256个数后,高8位定时计数寄存器把十六进制0x14所表示十进制数20赋给低8位定时计数寄存器重新开始计数,不断重复。
       IE=0x82;//相当于EA=1,ET0=1。
       TR0=1;//启动定时0
       P1=0x0f;
       while(1)
     {
        START=0;//启动信号初始为低电平
        START=1;//启动信号由低电平变为高电平,产生上升沿,内部寄存器清零。
        START=0;//启动信号由高电平变为低电平,产生下降沿,开始A/D转换
        while(EOC==0);//等待转换完成,开始A/D转换时为低电平,A/D转换结束后为高电平。
        ENA=1;//允许输出A/D数据到单片机
        temp=P3;//A/D数据
        Display_Result(temp);
        ENA=0;//关闭允许输出A/D数据到单片机
       }
     }
      void Timer0() interrupt 1
    {
       CLK=~CLK;//时钟信号输入端一般为500KHz,该定时器0定时时间为236微妙,即0.236毫秒,亦0.000236秒,相当于高低电平各占0.000236秒,一个周期就是高低电平时间,则T=0.000236sX2=0.000472s,大概T=0.000500s,频率为1/0.000500=2000Hz=2KHz。
     }

  • 相关阅读:
    DTD和Schema的区别
    在使用Maven中出现的小错误
    struts2 中 paramsPrepareParamsStack 拦截器
    Hibernate的save()和persist()的区别
    Spring学习笔记
    Hello Spring
    Hibernate3 和Hibernate4 在配置文件上的区别
    今日学习-商品数据库查询
    Java中避免表单重复提交
    Java学习笔记
  • 原文地址:https://www.cnblogs.com/AChenWeiqiangA/p/12811626.html
Copyright © 2020-2023  润新知