把接受的用户码显示在共阳数码管编码上

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
身体、性格、态度决定人的一生,当什么都没有的时候,至少我们要拿出态度来~
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(6238)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_094074',
blogTitle:'带小数点的数码管显示码值',
blogAbstract:'共阳极数码管码段(带小数点):{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x66,0x21,0x06,0x0e,0x0c,0x09,0x11}分别代表\r\n&&&& 0 , 1,&& 2,&& 3,&& 4,&& 5,&& 6,&& 7,&& 8,&& 9,&& A,& B,&&& C, D,& E,&& F,&& P,&& H,&& Y\r\n共阴极数码管码段(带小数点):\r\n{0xbf& ,0x86,0xdb,0xcf, 0xeb,0xed,0xfd,&0x87,& 0xff,&0xef, 0xf7,0xfc, 0x99,0xde,0xf9,& 0xf1,0xf3,0xf6,0xee}分别表示\r\n&&&& 0 ,',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:0,
permalink:'blog/static/',
commentCount:4,
mainCommentCount:4,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'身体、性格、态度决定人的一生,当什么都没有的时候,至少我们要拿出态度来~',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}查看: 4583|回复: 6
串口接受数据并显示在数码管上
/************************************************跳线设置:默认跳线位显示效果:接受串口发过来的一个字符,并以16进制的形式显示在led数码管上.注意事项:晶振为11.0592,可用串口调试程序选择9600波特率,"十六进制发送"勾上&&&&&&&& 在下面白框里输入如5F,这时候就会显示在数码管上.&&&做双机通信实验时候可用3根杜邦线连接2块开发板的p3.0 p3.1 和GNd,注意的&&&是p3.0和p3.1要交叉连接.************************************************/
[此贴子已经被作者于 0:36:43编辑过]
 管理员您好,如果想发送三位数字,比如253,该如何实现呢?谢谢!
学习,谢谢
马上试试& && && && && && && &
谢谢楼主无私分享
Powered by您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
实验5 数码管显示设计2015.ppt 16页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:350 &&
实验5 数码管显示设计2015
你可能关注的文档:
··········
··········
表2-5-1数码管显示编码8位数码动态扫描显示电路四.实验方案观察模式5电路,发现8位数码管的段选线是连在一起的,同时有8个位选线,因此我们只能采用动态扫描的显示形式。【例2-5-1】useieee.std_logic_1164.useieee.std_logic_unsigned.entityscanisport(clk:instd_--动态扫描频率seg:outstd_logic_vector(6downto0);--段信号控制输出dig:outstd_logic_vector(7downto0));--位控制信号输出architectureoneofscanissignalain:integerrange0to15;signalabc:std_logic_vector(2downto0);beginp0:process(clk)beginifclk’eventandclk=’1’thenabc&=abc+1;--abc是扫描计数信号p1:process(abc)--位选信号控制begincaseabciswhen&000&=&dig&=&&;ain&=1;--选择数码管k1,显示数字1when&001&=&dig&=&&;ain&=2;--选择数码管k2,显示数字2when&010&=&dig&=&&;ain&=3;--选择数码管k3,显示数字3when&011&=&dig&=&&;ain&=4;--实验箱采用共阴数码管when&100&=&dig&=&&;ain&=5;--所以低电平打开数码管的选通控制when&101&=&dig&=&&;ain&=6;--表示选中该数码管,开始工作when&110&=&dig&=&&;ain&=7;when&111&=&dig&=&&;ain&=8;whenothers=&endprocessp1;p2:process(ain)--译码电路begincaseainiswhen0=&seg&=&&;when1=&seg&=&&;when2=&seg&=&&;when3=&seg&=&&;when4=&seg&=&&;when5=&seg&=&&;when6=&seg&=&&;when7=&seg&=&&;when8=&seg&=&&;when9=&seg&=&&;when10=&seg&=&&;when11=&seg&=&&;when12=&seg&=&&;when13=&seg&=&&;when14=&seg&=&&;when15=&seg&=&&;whenothers=&endprocessp2;五.实验步骤与结果波形仿真正确后,进行硬件验证。请同学们自行查找确认引脚号。六.检查1.波形仿真,会讲2.硬件验证,操作及讲解3.TOOLS-NETLISTVIEWS-观察RTLVIEWS(布局布线前产生,不是设计的最终电路结构);TECHNOLOGYMAPVIEWS(POSTMAP);
正在加载中,请稍后...说明_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
上传于|0|0|暂无简介
你可能喜欢51单片机学习笔记:红外接收(对原子哥的ALIENTEK遥控器进行解码) - 嘎子的博客 - ITeye技术网站
博客分类:
正点原子的ALIENTEK遥控器
用户码00ff
16进制键值码表45
红外接收管
通用型即可
---------------------------------------------------------------------------
下面是类似的波形图,这个是网上找的,图片较大,缩小后看上去有些模糊,不过没关系,数据手册上一般都有
遥控器在发射红外信号之前,我们的mcu已经开启了定时器在定时器中断函数中的全局变量irTimeCounts++ 一直在自加irTimeCounts多长时间加一次? 或者说多长时间进入一次定时器中断函数呢?在方式2时,t=256*12/ 约为277.78us============================================================1.对于1.125ms的时间,timer0会中断1.125/t=4.05次 也就是要5次,算上各种误差,(顶多5次,至少4次)2.对于2.25ms 的时间,timer0会中断 2.25/t=8.1次, 也就是要9次,算上各种误差,(顶多9次,至少8次)
对于这里的次数,比N次小一点,就是N次,比N次大一点,就是N+1次,因为不会有半次,
误差给它正负0.4次足够了,给了误差后再算次数,直接舍入就行
那么我们就检测irTimeCounts的值,如果小于6或7,那么接收到的数据为0如果大于6或7,那么接收到的数据为1
从计算结果来看,我觉得0.56,1.125,2.25这些值的出现是比较合理的,能有效避免由于器件误差和环境造成的数据误判,而且计算也方便
#include "my51.h"
#include "ir.h"
#include "smg.h"
void main()
timer0Init();
//定时器0初始化
int0Init();
//外部中断0初始化
if(irTimeCountsArrProcess()) //如果成功接收并解析完成一帧数据
//就让蜂鸣器响一下
//蜂鸣器开启
led4=~led4;
//4号灯反转一下
displaySMG(irCodeByteDataProcessForSmg());//显示
//蜂鸣器关闭
//由于displaySMG()函数执行时间较短,故蜂鸣器响声时间也较短,听到滴了一下
#ifndef _51IR_H_
#define _51IR_H_
#include "my51.h"
extern u8 data smgWela[7];
//数码管显示的数据
extern void int0Init();
//外部中断0初始化
extern void timer0Init();
//定时器0初始化
extern bool irTimeCountsArrProcess();
//成功解析一帧中断数据返回TRUE
extern u8* irCodeByteDataProcessForSmg();//将遥控器码值处理成数码管可显示数据
#include "ir.h"
u8 irTimeCounts=0;
//定时器0在方式2下8位自动重装时的中断计数值
u8 irTimeCountsArr[32]={0};
//存放红外接收数据时的中断次数记录值,
u8 bitNum=0;
//标志当前接收的是第几个比特位
u8 irReceFlag=0;
//红外接收一帧数据未完成标志,为1时完成
u8 irCodeByteData[4]={0};
//保存接收到的4个字节的有效数据
u8 irTimeCountsArrProcessOk=0;//对接收到的33位数据处理未完成标志,1完成
void int0Init();
//外部中断0初始化
void timer0Init();
//定时器0初始化
bool irTimeCountsArrProcess();
//解析中断次数,即解码
u8* irCodeByteDataProcessForSmg();//将遥控器码值处理成数码管可显示数据
u8* irCodeByteDataProcessForSmg() //将解码的4字节数据处理成数码管可显示的数据
if(irTimeCountsArrProcessOk)
//检测一帧数据是否解析完成
//这里的用户码只显示低八位,因为高八位反正都是00(手上2个遥控器都是00)
//然后还显示遥控键值及其反码,我们的数码管只有6位,只显示3字节数据
if(irCodeByteData[2]+irCodeByteData[3]!=0xff)//校验数据的完整性
//最后一个字节是键码的反码
//调试代码
smgWela[0]=irCodeByteData[1] && 4 ;
smgWela[1]=irCodeByteData[1] & 0x0f;
smgWela[2]=irCodeByteData[2] && 4 ;
smgWela[3]=irCodeByteData[2] & 0x0f;
smgWela[4]=irCodeByteData[3] && 4 ;
smgWela[5]=irCodeByteData[3] & 0x0f;
smgWela[6]=0 //小数点全不显
irTimeCountsArrProcessOk=0;//标志清零,下一次有未解析的数据时才会再解析
bool irTimeCountsArrProcess() //对接收到的32位的中断次数数据进行解析
u8 i,j,k,value=0;
if(irReceFlag)
//检测是否已经接收到新的4字节的红外通信数据
for(j=0;j&4;j++)
//有4个字节
for(i=0;i&8;i++)
//对每个字节的8位数据处理
value&&=1;
if(irTimeCountsArr[k++]&6)
//这里我们用6或7都是可以的
value|=0x80;
//大于6的话该位数据是1
irCodeByteData[j]=//保存该字节,也就是遥控器的键码
irReceFlag=0; //接收标志清零,这样就会等到下次收到数据后才会再解析
irTimeCountsArrProcessOk=1; //中断数据解析完毕标志置1
return TRUE;
//解析完成
return FALSE; //未进行解析,该返回值主要是为了方便外部文件调用时判断的
void int0() interrupt 0//外部中断0
if(irTimeCounts&30) //9ms的话中断32.4次,30这个取值差不多就可以了,不用太精确
{ //这里9ms引导码需要timer0中断irTimeCounts=9*6*12)=32.4次
bitNum =0;
irTimeCounts=0;//为接收第0位数据做准备
//丢弃引导码,反正不是有效数据0或1的都丢弃,直接返回
irTimeCountsArr[bitNum]=irTimeC //将中断次数数据存储起来
irTimeCounts=0;
//存好了就立即清零,这样不会影响下一位数据的接收
//继续下一位
if(32==bitNum)
//32位数据已经接收完成(0~31已经存储)
//清零,这里不清也可以,反正引导时也会清
irReceFlag=1; //接收完成标志
void timer0() interrupt 1
//定时器0中断函数
irTimeCounts++;
//注:该值最大为255
void timer0Init() //定时器0初始化
{ //配置工作方式寄存器,且不影响定时器1的状态
TMOD &= 0xf0;
//保留定时器1的配置,并清除定时器0的配置
TMOD |= 0X02;
//使用定时器0的工作方式2
//工作方式2是8位自动重装
//打开定时器
//打开总中断
//启动定时器0
void int0Init()
//外部中断0初始化
//配置外部中断0的触发方式为 跳变延触发
//打开外部中断0
//打开总中断
#ifndef _51SMG_H_
#define _51SMG_H_
#include "my51.h"
sbit dula =P2^6;
//段选锁存器控制
sbit wela =P2^7;
//位选锁存器控制
extern u8 data smgWela[7];
//第一位到第六位,最后一个是小数点位置控制
#define dark 0x11//0x11是第17号元素,0x00是低电平,数码管不亮,即table[17]
#define dotDark 0xff
//小数点全暗
void displaySMG(u8* pWela); //数码管显示函数,参数是数组指针
#include "smg.h"
#include "my51.h"
static u8 code table[]= {
//0~F外加小数点和空输出的数码管编码
0x3f , 0x06 , 0x5b , 0x4f , // 0 1 2 3
0x66 , 0x6d , 0x7d , 0x07 , // 4 5 6 7
0x7f , 0x6f , 0x77 , 0x7c , // 8 9 A B
0x39 , 0x5e , 0x79 , 0x71 , // C D E F
0x80 , 0x00 , 0x40
// . 暗 负号
暗即不显示是第17索引号
//负号为第18索引号元素
由于此表只能一次显示一个小数点,故已注释掉,仅供查询
例如想要第一个和第六个数码管小数点同时点亮,
则执行 pWela-&dot = 0xfe & 0xdf
u8 code dotTable[]={
//小数点位置,某一位置0时,小数点亮
//那么全暗就是0xff
0xfe , 0xfd , 0xfb ,
0xf7 , 0xef , 0xdf
u8 data smgWela[7]={0,0,0,0,0,0,0}; //第一位到第六位,最后一个是小数点位置控制
//P0口的数码管位选控制锁存器只用了低6位,我们保留高2位的数据,留作它用
void displaySMG(u8* pWela)
//控制6位数码管显示函数,不显示的位用参数dark
u8 preState=P0|0x3f;
//保存高2位状态,其中最高位是ADC0804的片选信号
wela=0;dula=0;_nop_();//先锁定数据,防止吴亮及位选锁存器高2位数据被改变
//由于数码管是共阴极的,阳极送低电平,灯不亮
dula=1;_nop_();
//段选数据清空并锁定
//共阴极数码管是阴极置高不亮,低6位置1,高2位保留
wela=1;_nop_();
//注:wela和dula上电默认为1
//位选锁定,初始保留高2位的数据,低6位置高不亮
for(i=0;i&6;i++)
//显示6位数码管
P0=table[pWela[i]]|(((1&&i) & pWela[6])?0x00:0x80);
dula=1;_nop_();
//送段数据,叠加小数点的显示,0x00点亮小数点
P0=preState&~(1&&i); //不影响高2位数据,低6位是数码管位选,低电平有效
wela=1; _nop_();
//送位选号
delayms(1);
//稍作延时,让灯管亮起来
//消除叠影及误亮,阴极置1不亮,低6位置1,高2位保留并锁定
wela=1; _nop_();
xouou_53320
浏览: 299692 次
lastSeries 写道前辈,是不是在工作以后连System ...
前辈,是不是在工作以后连System.out.println( ...
chuanwang66 写道不过改了iconv.exe路径也不 ...
正在学习,多谢分享
不过改了iconv.exe路径也不能用。。。。

我要回帖

更多关于 数码管编码 的文章

 

随机推荐