完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include"IIC.h" ***it S4 = P3^3; //定义独立按键 unsigned char dat_Rd1 = 0; //存放Rd1数据 unsigned char dat_Rb2 = 0; //存放Rb2数据 unsigned char state = 0; //标志位 unsigned char code SEG_code[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e, 0xbf,0x7f}; //定义共阳数码管段码内容:0~F,—,. void Select_HC138(unsigned char n) { switch(n) { case 5: P2 = (P2 & 0x1f) | 0xa0; break; case 6: P2 = (P2 & 0x1f) | 0xc0; break; case 7: P2 = (P2 & 0x1f) | 0xe0; break; } } void Delay_tube(unsigned char t) //数码管延时函数 { while(t--); } void Show_tube(unsigned char position,unsigned char value) { Select_HC138(7); P0 = 0xff; Select_HC138(6); P0 = 0x01 << position; Select_HC138(7); P0 = value; } void Show_all() { Select_HC138(7); P0 = 0xff; Select_HC138(6); P0 = 0xff; } void Display_tube(unsigned char channel,unsigned char dat) { Show_tube(0,SEG_code[16]); Delay_tube(100); Show_tube(1,SEG_code[channel]); //显示通道 Delay_tube(100); Show_tube(2,SEG_code[16]); Delay_tube(100); Show_tube(5,SEG_code[dat/100]); //显示电压的百位 Delay_tube(100); Show_tube(6,SEG_code[(dat/10)%10]); //显示电压的十位 Delay_tube(100); Show_tube(7,SEG_code[dat%10]); //显示电压的个位 Delay_tube(100); Show_all(); } void Delay_keys() //按键延时函数 { unsigned char i,j; i = 108; j = 145; do { while(--j); }while(--i); } void Press_keys() { if(S4 == 0) { Delay_keys(); if(S4 == 0) { if(state == 0) { state = 1; //显示Rb2 } else if(state == 1) { state = 0; //显示Rd1 } } while(S4 == 0); } } void Read_Rd1() //采样光敏电阻Rd1的电压 { IIC_Start(); //IIC总线起始信号 IIC_SendByte(0x90); //写设备地址 IIC_WaitAck(); //等待从机应答 IIC_SendByte(0x01); //写控制字 IIC_WaitAck(); //等待从机应答 IIC_Stop(); //IIC总线停止信号 IIC_Start(); //IIC总线起始信号 IIC_SendByte(0x91); //读设备地址 IIC_WaitAck(); //等待从机应答 dat_Rd1 = IIC_RecByte(); //读取PCF8591通道1的数据 IIC_Ack(0); //产生非应答信号 IIC_Stop(); //IIC总线停止信号 } void Read_Rb2() //采样电位器Rb2的电压 { IIC_Start(); IIC_SendByte(0x90); IIC_WaitAck(); IIC_SendByte(0x03); IIC_WaitAck(); IIC_Stop(); IIC_Start(); IIC_SendByte(0x91); IIC_WaitAck(); dat_Rb2 = IIC_RecByte(); IIC_Ack(0); IIC_Stop(); } void main() { Select_HC138(5); P0 = 0x00; //关闭蜂鸣器和继电器 while(1) { Press_keys(); switch(state) { case 0: Read_Rd1(); Display_tube(1,dat_Rd1); break; case 1: Read_Rb2(); Display_tube(3,dat_Rb2); break; } } } |
|
|
|
只有小组成员才能发言,加入小组>>
3310 浏览 9 评论
2991 浏览 16 评论
3492 浏览 1 评论
9057 浏览 16 评论
4086 浏览 18 评论
1176浏览 3评论
604浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
597浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2334浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1895浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 17:20 , Processed in 1.425552 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号