找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4395|回复: 7
收起左侧

基于单片机的温控智能风扇的问题,小白提问希望解答

[复制链接]
ID:197037 发表于 2017-5-7 18:55 | 显示全部楼层 |阅读模式
#include <reg52.h>                 //调用单片机头文件
#define uchar unsigned char        //无符号字符型 宏定义  变量范围0~255
#define uint  unsigned int         //无符号整型 宏定义    变量范围0~65535
#include <intrins.h>
#define RdCommand 0x01 //定义ISP的操作命令
#define PrgCommand 0x02
#define EraseCommand 0x03  
#define Error 1
#define Ok 0
#define WaitTime 0x01 //定义CPU的等待时间
sfr ISP_DATA=0xe2;    //Flash数据寄存器地址(E2h)
sfr ISP_ADDRH=0xe3;   //Flash高字节寄存器地址(E3h)
sfr ISP_ADDRL=0xe4;   //Flash低字节寄存器地址(E4h)
sfr ISP_CMD=0xe5;     //Flash命令模式寄存器地址(E5h)
sfr ISP_TRIG=0xe6;    //Flash命令触发寄存器地址(E6h)
sfr ISP_CONTR=0xe7;   //ISP/IAP控制寄存器地址(E2h)
sbit dula=P2^6;//U1锁存器的锁存端  000001111111 显示函数11111100000
sbit wela=P2^7;//申明U2锁存器的锁存
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};                                          
uchar num;//定时器要用到
void ISP_IAP_enable(void);        //打开ISP,IAP功能
void ISP_IAP_disable(void);       //关闭ISP,IAP功能
void ISPgoon(void);               //公用的触发代码
uchar byte_read(unsigned int byte_addr);//字节读
void SectorErase(unsigned int sector_addr);//扇区擦除
void byte_write(unsigned int byte_addr, unsigned char original_data);//字节写
void display(); //000033333 显示函数3333300000

//数码管段选定义            
uchar code smg_du[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0,
                                           0x60,0x25,0x39,0x26,0x31,0x71,0xff};         //断码
//数码管位选定义
uchar code smg_we[] = {0xef,0xdf,0xbf,0x7f};
uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};        
uchar smg_i = 3;    //显示数码管的个位数
sbit dq   = P2^4;   //18b20 IO口的定义
sbit pwm = P2^3;    //蜂鸣器IO口定义


其中,
//数码管段选定义            
uchar code smg_du[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0,
                                           0x60,0x25,0x39,0x26,0x31,0x71,0xff};         //断码

是什么意思啊? 0X28显示的并不是0吧? 这段话是什么意思呢?断码是什么?



回复

使用道具 举报

ID:197850 发表于 2017-5-7 19:27 | 显示全部楼层
断码,通过控制数码管上对应灯管亮灭来达到显示出需要的显示内容
回复

使用道具 举报

ID:46999 发表于 2017-5-7 19:46 | 显示全部楼层
1:“断码”应是“段码”的笔误.
2:0X28就是这里的硬件条件下的“0”的编码。看图
数码管脚连接.png

回复

使用道具 举报

ID:197037 发表于 2017-5-7 21:02 | 显示全部楼层
维超 发表于 2017-5-7 19:46
1:“断码”应是“段码”的笔误.
2:0X28就是这里的硬件条件下的“0”的编码。看图

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

那这个代码是什么意思啊
回复

使用道具 举报

ID:7485 发表于 2017-5-7 21:22 | 显示全部楼层
是“段码”。即便是错别字也应该知道。
回复

使用道具 举报

ID:197037 发表于 2017-5-7 21:27 | 显示全部楼层
ahshmj 发表于 2017-5-7 21:22
是“段码”。即便是错别字也应该知道。

uchar code smg_du[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0,
                                           0x60,0x25,0x39,0x26,0x31,0x71,0xff};  
0X28按照楼上那位的图显示,是如何显示出0的呢? 求解答阿大神
回复

使用道具 举报

ID:7485 发表于 2017-5-8 08:47 | 显示全部楼层
有些led数码管的管脚排列不一样(不过很少),也有些是线路板设计时,各字段对应的IO没按顺序排(处于商业原因,故意打乱)。

你可以根据你自己的硬件,看看适应那种编码。如果是常见的LED和按顺序排列的段输出,就可以用常见的段编码,不过,共阳极和共阴极也是有区别的。
回复

使用道具 举报

ID:46999 发表于 2017-5-8 10:27 | 显示全部楼层
lx843040583 发表于 2017-5-7 21:27
uchar code smg_du[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0,
                          ...

作为共阳正向数码管,要显示“0”,就是位码高电平。段码中的A,B,C,D,E, F要低电平。而原作者的段码从高到低的排列是E,D,DP,C,G,A,F,B。相应端置低电平就是0。连起来是“00101000”.再转换成16进制就是0X28了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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