这个是小蜜蜂老师出的模拟题,以下是我写得程序

 

#include"reg52.h"
#include"iic.h"

unsigned char code SMG_int[18]=
{0xc0,0xf9,0xa4,
    0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,
    0xc0,0x86,0x8e,0xbf,0x7f};

 //数字“ 0. ”到数字“ 9. ”
unsigned char code SMG_float[10]=
{0x40,0x79,0x24,0x30,0x19,
0x12,0x02,0x78,0x00,0x10};


void InitHC573(unsigned char n) //通道选择
{
    switch(n)
    {
    case 4:P2=(P2&0x1f)|0x80;break;
    case 5:P2=(P2&0x1f)|0xa0;break;
    case 6:P2=(P2&0x1f)|0xc0;break;
    case 7:P2=(P2&0x1f)|0xe0;break;
    case 0:P2=(P2&0x1f)|0x00;break;
    }
}


void Delay(unsigned int t) //延迟函数
{
    while(t--);
}

void SMG_off(unsigned char dat)  //关闭全部数码管 (消隐)
{
    InitHC573(6);
    P0=0xff;
    InitHC573(7);
    P0=dat;
}


void Init_SMG(unsigned char dat,unsigned char pos)  //数码管显示:内容  位选
{
    InitHC573(7);
    P0=0xff;
    InitHC573(6);
    P0=0x01<<pos;
    InitHC573(7);
    P0=dat;
}

//===============pcf8591_AIN3===============
unsigned int dat_v=0;

void Read_pcf8591()
{
    IIC_Start(); 
    IIC_SendByte(0x90); 
    IIC_WaitAck();  
    IIC_SendByte(0x03);   //AIN3:0x03 3通道
    IIC_WaitAck();  
    IIC_Stop();  
    
    IIC_Start(); 
    IIC_SendByte(0x91); 
    IIC_WaitAck();  
    dat_v=1.961*IIC_RecByte(); 
    IIC_SendAck(1);
    IIC_Stop();  
}

void SMG_AIN3_1()  //数码管显示AIN3采集的电压
{
    Init_SMG(0xc1,0);Delay(500);
    
    Init_SMG(0xff,1);Delay(500);
    Init_SMG(0xff,2);Delay(500);
    Init_SMG(0xff,3);Delay(500);
    Init_SMG(0xff,4);Delay(500);
    
    Init_SMG(SMG_float[dat_v/100],5);Delay(500);
    Init_SMG(SMG_int[(dat_v/10)%10],6);Delay(500);
    Init_SMG(SMG_int[dat_v%10],7);Delay(500);
    
     SMG_off(0xff);
}

//================dat_n=====================
int dat_n=300;
void SMG_2()  //参数设置界面
{
    Init_SMG(0x8c,0);Delay(500);
    
    Init_SMG(0xff,1);Delay(500);
    Init_SMG(0xff,2);Delay(500);
    Init_SMG(0xff,3);Delay(500);
    Init_SMG(0xff,4);Delay(500);
    
    Init_SMG(SMG_float[dat_n/100],5);Delay(500);
    Init_SMG(SMG_int[(dat_n/10)%10],6);Delay(500);
    Init_SMG(SMG_int[0],7);Delay(500);
    
     SMG_off(0xff);
}

//===============计数======================
unsigned char n=0;

void  SMG_3()  //j计数界面
{
    Init_SMG(0x92,0);Delay(500);
    
    Init_SMG(0xff,1);Delay(500);
    Init_SMG(0xff,2);Delay(500);
    Init_SMG(0xff,3);Delay(500);
    Init_SMG(0xff,4);Delay(500);
    
    Init_SMG(0xff,5);Delay(500);
    Init_SMG(SMG_int[n/10],6);Delay(500);
    Init_SMG(SMG_int[n%10],7);Delay(500);
    
     SMG_off(0xff);
}

//=========按键功能============================
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;

unsigned char stat_s4=1;
unsigned char stat_s5=0;
unsigned char stat_s6=0;

void Scannkey()
{
    if(S4==0)  
    {
        Delay(100);
        if(S4==0)
        {
            stat_s4++;
            if(stat_s4==4) stat_s4=1;
            while(S4==0)  //
            {
             SMG_AIN3_1();
             SMG_2();
             SMG_3();
            }
        }
        
    }
    
    if(S5==0)
    {
        Delay(100);
        if(S5==0)
        {
            stat_s5=1;
        while(S5==0)
        {
         SMG_2();
        }
        
        }
    }
    
    if(S6==0)
    {
        Delay(100);
        if(S6==0)
        {
         stat_s6=1;
         while(S6==0)
         {
          SMG_2();
         }
         
        }
        
    }
}


//======================模式选择=======================
void In_1_2_3()
{
    if(stat_s4==1)  //电压数据界面
    {
    Read_pcf8591();
    SMG_AIN3_1();
    }
    
    if(stat_s4==2)  //参数设置界面
    {
      SMG_2();
      if(stat_s5==1)   //减0.5V
      {
       dat_n=dat_n-50;
       if(dat_n<0)  dat_n=500;
      }
      
      if(stat_s6==1)  //加0.5V
      {
       dat_n=dat_n+50;
       if(dat_n>500)  dat_n=0;
      }
      
      stat_s5=0;
      stat_s6=0;
    }
    
    if(stat_s4==3)  //计数显示界面
    {
     SMG_3();
    }
}

//==================定时器0========================
unsigned char count_t=0;
unsigned char t_s=0;

void Time0()
{
    TMOD=0x01;   
    TH0=(65535-50000+1)/256;
    TL0=(65535-50000+1)%256;
    
    ET0=1;
    EA=1;
}

void Serive() interrupt 1
{
    TH0=(65535-50000+1)/256;
    TL0=(65535-50000+1)%256;
    
    count_t++;
    if(count_t==20)  // 定时1s
    {
        n++;
        count_t=0;
        if(n>99) n=0;
    }
    
}

void LED()
{
    if(dat_v<dat_n)
    {
        TR0=1;  //启动定时器
        
        if(n>2)  //L1亮
        {
        InitHC573(4);
        P0=0xfe;
        InitHC573(0);
        }
        
        if(n>4)  //L1、L2亮
        {
        InitHC573(4);
        P0=0xfc;
        InitHC573(0);
        }
        
        if(n>6)  //L1、L2、L3亮  同时L8亮1s,熄灭1s
        {
            if(n%2==0)  
            {
            InitHC573(4);
            P0=0xf8&0x7f;  //L8亮
            InitHC573(0);
            }
            
            if(n%2!=0)
            {
            InitHC573(4);
            P0=0xf8;     //L8熄灭
            InitHC573(0);
            }
        }
    }
    
    if(dat_v>dat_n)
    {
        TR0=0;  //关闭定时器
        n=0;    //计数清零
        InitHC573(4);  //关闭指示灯
        P0=0xff;
        InitHC573(0);
    }
}

void Init()  //初始化
{
    InitHC573(5);
    P0=0x00;
    InitHC573(4);
    P0=0xff;
}

void main()
{
    Init();
    Time0();
    while(1)
    {
    LED();
    In_1_2_3();
    Scannkey();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以给您提供一个简单的蜜蜂到家小程序的代码示例,但需要提醒的是,这个代码示例需要在微信小程序开发环境下使用。 首先,您需要在微信小程序开发者工具中新建一个小程序项目。然后,在 app.json 文件中配置页面路由: ``` { "pages": [ "pages/index/index", "pages/map/map" ], "window": { "navigationBarTitleText": "蜜蜂到家" } } ``` 接下来,我们可以创建两个页面,一个是首页(index),一个是地图页面(map)。 在首页中,我们可以放置一个按钮,当用户点击按钮时,跳转到地图页面: ``` <!-- index.wxml --> <view class="container"> <button bindtap="goToMap">去地图页面</button> </view> ``` ``` // index.js Page({ goToMap: function() { wx.navigateTo({ url: '/pages/map/map', }) } }) ``` 在地图页面中,我们可以使用微信小程序提供的地图组件,来显示用户当前位置和目标位置: ``` <!-- map.wxml --> <view class="container"> <map markers="{{markers}}" show-location bindmarkertap="showMarkerInfo"></map> </view> ``` ``` // map.js Page({ data: { markers: [{ id: 1, latitude: 39.914450, longitude: 116.404670, title: '蜜蜂到家' }] }, onLoad: function() { wx.getLocation({ type: 'gcj02', success: function(res) { console.log(res) this.setData({ markers: [{ id: 0, latitude: res.latitude, longitude: res.longitude, title: '当前位置' }, { id: 1, latitude: 39.914450, longitude: 116.404670, title: '蜜蜂到家' }] }) } }) }, showMarkerInfo: function(e) { console.log(e) } }) ``` 在 onLoad 函数中,我们使用 wx.getLocation 函数来获取用户当前位置,并将其设置为地图的中心点。同时,我们将蜜蜂到家的位置也设置为一个标记点。当用户点击标记点时,我们可以在 showMarkerInfo 函数中获取到该标记点的信息。 这只是一个简单的示例,实际开发中还需要考虑很多因素,例如如何获取用户的目的地、如何规划路线等。希望这个示例能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jie918294071

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值