vb做个遥控器界面控制单片机数码管显示

作者&投稿:舌琦 (若有异议请与网页底部的电邮联系)
单片机中如何用按键去控制数码管显示~

index加到超过10之后,读数组会出问题,应加个判断,超过10之后回0.
还有,有些地方的if之后缺少了{}

1、首先,要把代码写好,点亮数码管。

2、代码写完后,要确认原先写好的代码是不是正确的。

3、确认代码无误后,进入下一步,就是在这一行代码(箭头所指)的地方,将这四个字删去。

4、然后如图所示,四个字已经删去,只要改成数字相应的代码即可。

5、这里改成的是代表数字0的代码,如图所示。

6、最后写好代码后,将生成的hex文件写进单片机,数码管显示的数字就变成0了。

#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

#define Nop()

volatile ulong IRcode=0x00000000; //32位的键代码
volatile ulong Irdcode=0x00000000;
volatile uint customcode=0x0000; //16位用户码
volatile uint time_us=0x0000; //两个下降沿之间的时间

volatile uchar timeH,timeL; //保存TH1 TL的值

uchar Lcustomcode; //低8用户码
uchar Hcustomcode; //高8
uchar datacode; //8位键数据码
uchar mycode;
uchar Rdatacode; //8位键数据反码
uchar uc1ms;
uchar uc10ms;
uchar uc3ms;

uchar ucDispTime;
uchar ucDispOrder;
uchar ucDispCon;
uchar ucSpeakerTime;
unsigned char code LedData[16] = ;
unsigned char code LedCon[2] = ;
unsigned char ucDispData[2]; // 存放显示数据
sbit led1 = P3^7;
sbit led2 = P3^6;
sbit power=P1^0; //电源开关
sbit BEEP= P2^1;
bit NewIRcode=0; //指示当处理完了32位码后,就有了新的遥控码
bit DataRight=0; //为1时读取数据正确
bit bSampleOk;
bit bSampling;
bit b10msInt;
bit b1msInt;
bit bKeySound;
bit b1msMain;
bit IR_E; //表示有新的遥控键控下就更新扫描数据
bit b3msint;

void SendDataToDispDevice();
void Ir_process();
void display();
void beeping();

/****** 晶振为12 MHZ*******/
/**定时器1,12 MHZ最大定时为65.53ms***/
//------------------------------------------------------------------------------
void init()
{
IP=0x09; //定时器1,外部中断0优先级高
TMOD=0x11; //定时器0,工作方式1 ; 定时器1,工作方式1
TCON=0x01; //外中断0下降沿触发,(包括TR1=0,TR0=0)
TH0=0xff; //初始化定时器0,定时0.2ms
TL0=0x47;
TH1=0x00; //初始化定时器1
TL1=0x00;

EA=1; //开全中断
ET0=1; //开放T0中断
ET1=1; //开放T1中断
EX0=1; //开放INT0
TR1=0;
TR0=1;

}
//--------------------------------------
void TimeProg(void)
{
b1msMain = b1msInt;
b1msMain=0;
b10msInt = 0;

if(b1msInt == 1)
{
b1msMain=1;
if(++uc10ms == 10)
{
uc10ms = 0;
b10msInt = 1;
if(bKeySound==1)
{ beeping();
bKeySound=0;
}
}

}
}//void TimeProg(void)
//-------------------------------------interrupt0-------------------------------------
void IR_ISR() interrupt 0 using 1 //遥控器中断处理函数
{
static uchar cn;

TR1=0;
timeH=TH1;
timeL=TL1;
TH1=0;
TL1=0;
TR1=1; //开定时器中断1

time_us=(unsigned int)timeH;
time_us=time_us<<8;
time_us=time_us|timeL;

if(time_us>12200&&time_us<13000) //遇到引导码,就把cn清0,IRcode清0
//引导码的时间长度为9ms+4.5ms
if(cn<34)
{
if(time_us>950&&time_us<1120) //0
{
IRcode=IRcode|0x00000000;
if(cn<33) IRcode=IRcode>>1;
}

else if(time_us>1920&&time_us<2120) //1t > 1950 && t < 2150
{
IRcode=IRcode|0x80000000;
if(cn<33) IRcode=IRcode>>1;
}

//else if(time_us>10000&&time_us<11000) //遇到重复码
//cn用于记录接收到的数据位
}
cn++;
if(cn==34)
{ NewIRcode=1;
TR1=0;

Irdcode= IRcode; cn=0;
} //读完32位码,则有新码产生

}

//--------------------------------------timer_ISR------------------------------
void Timer0_ISR() interrupt 1 using 2 //定时器0中断函数
{
TR0=0;
TH0=0xff; //初始化定时器0,定时0.2ms 晶振为11.0592 MHZ
TL0=0x47;
TR0=1;
if(++uc1ms == 5)
{
uc1ms = 0;
b1msInt=1;
if(++uc3ms==8)
{
uc3ms=0;
b3msint=1;
SendDataToDispDevice(); //n* ms送一次显示
}

}
}//void Timer0IntProg() interrupt 1 using 1

void Timer1_ISR() interrupt 3 using 3 //定时器1中断函数
{
TR1=0;
TH1=0x00; //初始化定时器1
TL1=0x00;
TR1=1;

}
//--------------------SendDataToDispDevice----------
void SendDataToDispDevice()
{
unsigned char n;
//watchdog();
if(++ucDispOrder >= 2) ucDispOrder = 0; // 下一显示巡回

// 下面为发送控制数据 位控

if(ucDispOrder==0)
{led1=0;
led2=1;
Nop();
Nop();

}
if(b3msint==1)
{if(ucDispOrder==1)
{led2=0;
led1=1;
Nop();
Nop();
}
}
// 下面为发送显示数据
n = LedData[ucDispData[ucDispOrder]];
P0=n;

} //void SendDataToDispDevice()

//------------------------------------main()----------------------------------------------
void main()
{

init();
beeping();
while(1)
{
TimeProg();
Ir_process();
display();

}

}

void Ir_process()

{

if(NewIRcode==1) //如果有新的遥控码就读
{
NewIRcode=0; //读完之后清零,表示新码已读
customcode=(Irdcode>>16); //取红外码中的按码键
//取低8位用户码
Lcustomcode=customcode>>8;//取低8位按码键
datacode=(unsigned char)(customcode&0x00ff); //取高8位按码键

Rdatacode=Lcustomcode; //取低8位按码键的反码

if(~Rdatacode!=datacode)
{ DataRight=0;
Irdcode=0;
datacode=Rdatacode=0;
} //校验用户码,反码

else
{ DataRight=1;
IR_E=1;
mycode=datacode;}
if(DataRight==1)

}

}

void display()
{
/* unsigned char a[2];
a[0] = mycode & 0x0f;
mycode = mycode >> 4;
a[1] = mycode & 0x0f;
ET0 = 0;
ucDispData[0] = a[0];
ucDispData[1] = a[1];
ET0 = 1;*/
if(IR_E==1)
{
ET0 = 0;
ucDispData[0] = mycode & 0x0f;
mycode = mycode >> 4;
ucDispData[1] = mycode & 0x0f;
IR_E=0;
ET0 = 1;
}
}

/**********************************************************/
void delay(unsigned char x) //x*0.14MS
{
unsigned char a;
while(x--)
{
for (a = 0; a<13; a++)
}
}

/**********************************************************/
void beeping()
{
unsigned char i;

for (i=0;i<100;i++)
{
delay(4);
BEEP=!BEEP; //BEEP取反
}
BEEP=1;
//关闭蜂鸣器
}


可以用comm控件设置好波特率,发送数据到单片机然后再判断。
单片机设计群:64280288

哇……向夏风学习……


ABCD四个键的遥控器的匹配方法
1、 A键——常闭、全锁。此两种自动门遥控器的功能完全一样,只是厂家不同所写不同。常闭模式:是指通过遥控器切断自动门里外感应探头的信号达到感应器功能失效,是自动门门体保持关闭状态。2、 B键——常开、单向。常开模式:即通过遥控器切断自动门感应探头信号,给自动门长时间触点开门信号来达到...

怎样设置空调遥控器代码?
您好,下图为代码表内容:遥控器的设置 该遥控器有三种设置方法(A、B、C种),请任选其中的一种进行操作。A.人工输入代码法 1. 手动代开空调机电源,从“代码表”中查出你所要遥控的空调机所对应的机型,并找出代码。例如:格力代码为000,020-039;2. 按住“设置”键(约3秒)不放,待机型代码...

a320b品牌直通车万能遥控器开格力怎么使用使用?
2)从"代码表"中查出你所需遥控的空调机对应的机型代码,并打开空调机电源;3)连续(间断)按"设置"键,直至所需代码显示在窗口上并闪烁;4)遥控器不能增加您空调上的功能。如果您的空调机上无风向功能,则遥控器的风向键无效。5)遥控器为低耗产品,正常情况下,电池寿命为 6 个月,若使用不当...

华为手机怎么做遥控器用?
手机使用红外技术,通过智能遥控 APP 与家电连接,仅需一部手机,即可方便遥控各类家电(如机顶盒、电视、DVD、空调、相机、投影仪、网络盒子)。以华为P40 Pro手机为例:一、添加和使用遥控器 1、进入实用工具 > 智能遥控 > 添加 ,选择遥控器类型(电视、空调、机顶盒、相机、网络盒子、DVD、投影仪)...

3D55B5000i新买的遥控器怎么使用的
机顶盒遥控器要用学习型的。按住学习键,遥控器上的灯常亮后松开,把电视遥控器发射头对着学习遥控器发射头,同时按电视遥控器上要用的键和学习遥控器上的空白键,学习遥控器上的灯会闪烁,一个电视遥控器的键对应一个空白键,重复操作,全部按完后,再按一下学习遥控器上的学习键,这时灯灭,好了。

遥控器型号002B怎么使用
风向键,风向按键能够进行风向的选择,它的导风片主要以自动位置1位置2位置3位置4位置5自动进行循环。遥控器长期不用也需要防止灰尘与潮湿的空气,可以选择密封袋将遥控器收纳进去。遥控器内部涉及很多紧密元器件与电路板,所以平时放置的位置一定要能防止意外跌落。

b737b万能空调遥控器怎么制冷
1·首先我们要仔细的阅读万能遥控器说明书,这有助们更快的了解遥控器各个功能键的使用方法。2·我们要给万能遥控器装上电池。这样万能遥控器屏上就会显示温度、风量、模式等。把模式打到制冷档上。3·按下空调电源开关,让空调通电,空调通电后,我们会听到嘟的一声。4·把万能遥控器对准空调的遥控...

W3-m031b遥控器使用方法
2、你如果买的是新的机器,那是就工厂里的技术员或品管在调试、检查机器时,忘了退出工厂调试维修模式。(特别是杂牌的电视机会出现这样的情况)3、你用的是万能遥控器,万能遥控器有相应的按键直接进入了工厂调试维修模式。找个懂家电维修的人帮你看看、帮你退出工工厂调试维修模式或设置一下万能遥控...

灯具遥控开关怎么配对遥控
6、用遥控器测试遥控灯(分别用开关和遥控器进行测试)。五、灯具遥控装置安装注意事项?1、遥控电路安装要注意零火线,把多路接收装置开关是与照明的火线连接。2、这个遥控照明电路非常方便,尤其适宜距离较远楼上楼下双控双开的报名电路。3、多路多控的遥控器上与接收装置有对码,单路单控的不用对码。

三星la46m81b遥控器怎么调节目源
三星LA46M81B遥控器怎么调节目源 在三星LA46M81B遥控器上调节目源非常简单。首先,您需要找到遥控器上的“目源”按钮。通常,这个按钮位于遥控器的顶部或者中间位置。一旦找到了“目源”按钮,您只需按下它,就能打开目源菜单。在打开目源菜单后,您会看到显示器上显示出各种不同的选项,例如电视节目...

喜德县15355424985: 求高手教学 VB自制介面 PC当按钮 经RS232控制单片机 -
锻垄世保: 1、制定协议,即PC与你的单板之间的协议,比如握手信号(判断PC与单板是否通信正常),按键信号(哪个按键代表哪个命令)等;协议构成可参考MODBUS协议;除此之外要注意串口的硬件配置:停止位、起始位什么的;2、VB界面,怎么生产一个界面不用说了吧?设置VB串口控件,然后采用按键触发,即点击按键后触发VB串口控件,实现命令下发;3、单板命令执行,单板上利用串口中断或者定时查询的方式接受PC下发的命令,根据你指定的协议分别执行操作;整个系统就一个主从控制方式,PC为主、单板为从.

喜德县15355424985: 用VB编写一监控界面,监控单片机运行 -
锻垄世保: 采用串口通讯.软件部分很简单,直接用vb自带的串口控件.时刻监视串口.硬件部分就是将温度值通过串口送给主程序.建议:1设定温度值可以由软件程序通过串口送信给单片机.2通讯的时候采用包的形式进行通讯.例如: 头部 数据 结尾 头部:5a 数据:为相应温度值的asc码 结尾:0d 只是思路而已.其中最主要就是串口通信部分的设计.

喜德县15355424985: 谁能说下用vb 怎么能控制单片机 顺便推荐基本这方面的书 谢谢啦 -
锻垄世保: vb控制单片机主要就是通过串口通过单片机里既定的传输协议来通讯.vb来做上位机程序主要是vb来做窗体简单.还有MSCOMM通讯控件比较好用.delphi/BC++ 也不错,可用API 或第三方通讯控件.如SPCOMM.VC++ 虽然什么都能做,但做简单程序比较尴尬.以上高手除外.还有直接在XP下用汇编做窗口的高手呢.

喜德县15355424985: VB软件有这样的功能吗:和现场设备的单片机交换数据,在电脑屏上显示,电脑控制单片机程序运行. -
锻垄世保: 可以,VB可通过串口(或者虚拟串口),并口与单片机进行数据通信,并在电脑上显示.在具有通信和窗口界面的功能软件中,VB是最简单易学的,但是VB也有其致命的缺点:代码长度较长,效率较低;软件编好后,不能100%的彻底编译,很多问题在运行中出现,这一点比不过VC.

喜德县15355424985: 怎么用vb语言控制单片机输出高低电平
锻垄世保: VB编的代码只能在WINDOWS系统上运行,也就是说在PC上运行,那么想通过VB编的软件控制单片机的话就得跟单片机进行通讯.要通讯就得在单片机里面写好程序,做好跟PC通讯的协议解析,单片机收到给P0.1高就执行,收到给P0.2低执行!

喜德县15355424985: 如何VB编写数控程序 -
锻垄世保: 数控程序多用来控制单片机或一些设备机械.一般用电脑的串口(com口)与这些设备相连.vb中通过利用comm控件,从串口发送接收信号来实现对设备的控制.具体编写方法就具体问题具体分析了.

喜德县15355424985: 在VB中,实现PC机对51单片机的控制 -
锻垄世保: 过程就是这样哦,pc机使用mscomm或者api函数,单片机接串口,通过执行串口中断程序实现控制.一般单片机开发板都有这个参考程序,你可以看下.

喜德县15355424985: VB怎么通过串口控制单片机,也就是说VB怎么通过串口读写单片机? -
锻垄世保: 可以通信,也就是 串口通信还有一个 就是 下载程序 到单片机,不过要 单片机 支持 串口下载 才行,STC 的单片机可以

喜德县15355424985: 如何把单片机数码管中的数据显示在DELPHI上位机上 -
锻垄世保: 采用RS-232接口芯片与个人电脑进行通讯,将单片机数码管中的数据传送给电脑,再通过电脑上的应用软件如VB显示在屏幕上. 具体方法: 1需要在单片机电路板上加一个RS-232接口芯片 2RS-232接口连接线 一头接单片机 一头接电脑的9针串口 3分别编写下位机的通讯程序和上位机的通讯程序,单片机每次更新数据时,都要同时向电脑通讯,将更新的显示数据传送给电脑,由上位机软件负责屏幕显示.

喜德县15355424985: 谁能教我用VB编一个界面用于单片机和PC机的通讯啊
锻垄世保: 使用MSCOMM控件,按照上下位机的通信协议,编写代码. Private Sub Form_Load() MSComm1.Settings = "9600,n,8,1" '暂定无校验,数据位8位,停止位1位 MSComm1.InputMode = comInputModeBinary '采用二进制传输 MSComm1....

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网