123

助理工程师

发表于 2017-4-12 21:36:09  
谢谢楼主分享啊
回复

点赞 举报

助理工程师

发表于 2017-4-12 21:38:26  

谢谢楼主分享啊
回复

点赞 举报

助理工程师

发表于 2017-4-13 15:08:53  
wuyi930 发表于 2016-10-18 21:11
很棒!!!!!!!!!!!

#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,bai,shi,ge,tt;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  
// //数码管段定义;
uchar code table1[]={0xfb,0xfd,0xfe}; //数码管位定义;
sbit open=P3^7;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit light=P3^2;
//ADC0832的引脚;
sbit adCS =P3^1;  //ADC0832 片选  ;
sbit adDI =P3^3;  //ADC0832 通道选择和初始化输入 ;
sbit adDO =P3^3;  //ADC0832 的数据输出;
sbit adCLK =P3^0;  //ADC0832 时钟信号;
uchar getdat; //获取ADC转换回来的值;
void display(uchar shi,uchar ge);
void delay(uint z);
void keyscan();
void init();
uchar adc0832(unsigned char channel);
//主程序 ;
void main()
{
  init();//初始化子程序  ;
  keyscan();
while(1)
{   
      light=1; //光线初始化为0;
    if(light==0)
        {   
             getdat=adc0832(1);
                 display(temp/10,temp%10);    //显示数字;
            if (getdat>120) //声音超过2.4V后灯亮;
      {  
            shi=temp/10; //取出十位数字;
       ge=temp%10; //取出个位数字;
            display(shi,ge);    //显示数字;
                 TR0=1;       //启动定时器0;
             if(aa==16)
           {        
             open=0;      //开启照明灯;
               aa=0;
              temp--;         //倒计时;
             if(temp==-1)
             {
                            temp=0;
                                   open=1;    //关闭照明灯;
         }
       }
      }
    }
  }
}
//延时函数;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
//显示数码管内容;
void display(uchar shi,uchar ge)
{
    P2=0xfe;
    P0=table[shi];
    delay(1);
    P2=0xfd;
    P0=table[ge];
    delay(1);
         P2=0xfc;
}
void init()   
{
TMOD=0x01;
TH0=(65536-50000)/256;    //给定时器T0的高8位赋初值;
TL0=(65536-50000)%256;     //给定时器T0的低8位赋初值;
EA=1;             //开cpu总中断;
ET0=1;            //开T0中断;
TR0=0;           //关闭定时器0;
IE0=1;
//外中断0初始化        ;
IT0=1; //下降沿触发;
EX0=1;
light=1; //光线初始化为0;
}
//T0中断函数;
void timer0() interrupt 1
{
TH0=(65536-50000)/256;      //赋初值;
TL0=(65536-50000)%256;
aa++;
}
//外中断0函数 ;
  void int0() interrupt 0
{
     light=0;
}
//键盘扫描函数 ;
void keyscan()
{
        if(key1==0)
        {
                delay(5);   //消抖;
                if(key1==0)  //按下key1灯亮时间为10s;
                {   
                            temp=10;     //10s延时;  
                }
        }
        if(key2==0)
        {
                delay(5);   //消抖;
                if(key2==0)  //按下key2灯亮时间为20s;
                {
                           temp=20;
                  }
        }
        if(key3==0)
        {         
delay(5);   //消抖;
                  if(key3==0)  //按下key3灯亮时间为30s;
                {  
                    temp=30;
                }
        }
}
uchar adc0832(unsigned char ch) //AD转换,返回结果;
{  
    uchar i=0;
    uchar j;
    uint dat1=0;
    uchar dat2=0;
    if(ch==0)ch=2;
    if(ch==1)ch=3;
    adDI=1;
    _nop_();
    _nop_();
    adCS=0;//拉低CS端;
    _nop_();
    _nop_();
    adCLK=1;//拉高CLK端;
    _nop_();
    _nop_();
    adCLK=0;//拉低CLK端,形成下降沿1        ;
    _nop_();
    _nop_();
    adCLK=1;//拉高CLK端;
    adDI=ch&0x1;
    _nop_();
    _nop_();
    adCLK=0;//拉低CLK端,形成下降沿2        ;
    _nop_();
    _nop_();
    adCLK=1;//拉高CLK端;
    adDI=(ch>>1)&0x1;
    _nop_();
    _nop_();
    adCLK=0;//拉低CLK端,形成下降沿3        ;
    adDI=1;//控制命令结束 ;
    _nop_();
    _nop_();
    dat1=0;
    for(i=0;i<8;i++)
    {
        dat1|=adDO;//收数据;
        adCLK=1;
        _nop_();
        _nop_();
        adCLK=0;//形成一次时钟脉冲 ;
        _nop_();
        _nop_();
        dat1<<=1;
        if(i==7)dat1|=adDO;
    }  
    for(i=0;i<8;i++)
    {
        j=0;
        j=j|adDO;//收数据;
        adCLK=1;
        _nop_();
        _nop_();
        adCLK=0;//形成一次时钟脉冲 ;
        _nop_();
        _nop_();
        j=j<<7;
        dat2=dat2|j;
        if(i<7)dat2>>=1;
    }
    adCS=1;//拉低CS端;
    adCLK=0;//拉低CLK端;
    adDO=1;//拉高数据端,回到初始状态 ;
    dat1<<=8;
    dat1|=dat2;
    return(dat1);
}
回复

点赞 举报

发表于 2017-4-13 17:02:30  
支持一下
回复

举报

助理工程师

发表于 2017-5-11 21:58:16  
51系列HJ-1G仿真开发板proteu
回复

点赞 举报

实习生

发表于 2017-6-1 11:41:53  
非常好,帮了大忙了,亲!!!
回复

点赞 举报

技术员

发表于 2017-6-20 10:05:11  
有错误,不能运行
回复

点赞 举报

技术员

发表于 2018-1-20 09:23:15  
HJ奸商,上过它的当
回复

点赞 举报

实习生

发表于 2018-2-14 20:28:26  
很想要学
回复

举报

123
高级模式
您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区