標(biāo)題:
單片機(jī)雙單片機(jī)實(shí)現(xiàn)紅外遙控器模擬Proteus仿真代碼 VS Code工程
[打印本頁(yè)]
作者:
BOWIN
時(shí)間:
2022-3-16 10:26
標(biāo)題:
單片機(jī)雙單片機(jī)實(shí)現(xiàn)紅外遙控器模擬Proteus仿真代碼 VS Code工程
研究學(xué)習(xí)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif
(47.01 KB, 下載次數(shù): 56)
下載附件
2022-3-18 03:36 上傳
代碼是用的VS Code編輯器
單片機(jī)源程序如下:
//elecfun 2018-04-01 01:22:17
#include <STC12C2052AD.h>
#include <intrins.h>
#include "IRNEC.h"
unsigned char IR_KEY[6][3] = {0xFF};
sbit KEY_SET = P3^7;
#define _DEBUG
#ifdef _DEBUG
unsigned char code ITC[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//12mhz 4800bps
void UART_init(void)
{
PCON |= 0x80; //波特率不倍速
SCON = 0x50; //8位數(shù)據(jù),可變波特率
TMOD &= 0x0F;
TMOD |= 0x20;
TL1 = TH1 = 0xF3;
ET1 = 0;
TR1 = 1;
}
void SendChar(unsigned char dat)
{
SBUF = dat;
while (!TI);
TI = 0;
}
void SendString(unsigned char *s)
{
while (*s) //Check the end of the string
{
SendChar(*s++); //Send current char and increment string ptr
}
}
#endif
/********************讀字節(jié)函數(shù)*********************/
unsigned char Byte_Read(unsigned int add)
{
ISP_DATA = 0x00;//清空數(shù)據(jù)
ISP_CONTR = 0x83;//打開ISP,設(shè)置操作等待時(shí)間 12MHz以下0x83 30MHz以下0x80 6MHz以下0x84
ISP_CMD = 0x01;//字節(jié)讀命令
ISP_ADDRH = add>>8;//設(shè)置高8位地址
ISP_ADDRL = add&0x00ff;//設(shè)置低8位地址
ISP_TRIG = 0x46;//發(fā)送46h到觸發(fā)寄存器
ISP_TRIG = 0xb9;//發(fā)送b9h到觸發(fā)寄存器
_nop_();//延時(shí)
ISP_CONTR = 0;//關(guān)閉IAP 功能
ISP_CMD = 0;//清空命令寄存器
ISP_TRIG = 0;//清空命令觸發(fā)寄存器
ISP_ADDRH = 0;//清空地址高位
ISP_ADDRL = 0;//清空地址低位
return (ISP_DATA);//返回讀到的數(shù)據(jù)
}
/*******************字節(jié)編程函數(shù)********************/
void Byte_Program(unsigned int add, unsigned char dat)
{
ISP_CONTR = 0x83;//打開ISP,設(shè)置操作等待時(shí)間
ISP_CMD = 0x02;//字節(jié)編程命令
ISP_ADDRH = add>>8;//設(shè)置高8位地址
ISP_ADDRL = add&0x00ff;//設(shè)置低8位地址
ISP_DATA = dat;//要編程的數(shù)據(jù)先送進(jìn)ISP_DATA 寄存器
ISP_TRIG = 0x46;//發(fā)送46h到觸發(fā)寄存器
ISP_TRIG = 0xb9;//發(fā)送b9h到觸發(fā)寄存器
_nop_();//延時(shí)
ISP_CONTR = 0;//關(guān)閉IAP 功能
ISP_CMD = 0;//清空命令寄存器
ISP_TRIG = 0;//清空命令觸發(fā)寄存器
ISP_ADDRH = 0;//清空地址高位
ISP_ADDRL = 0;//清空地址低位
}
/********************扇區(qū)擦除函數(shù)**********************/
void Sector_Erase(unsigned int add)
{
ISP_CONTR = 0x83;//打開ISP,設(shè)置操作等待時(shí)間
ISP_CMD = 0x03;//扇區(qū)擦除命令
ISP_ADDRH = add>>8;//設(shè)置高8位地址
ISP_ADDRL = add&0x00ff;//設(shè)置低8位地址
ISP_TRIG = 0x46;//發(fā)送46h到觸發(fā)寄存器
ISP_TRIG = 0xb9;//發(fā)送b9h到觸發(fā)寄存器
_nop_();//延時(shí)
ISP_CONTR = 0;//關(guān)閉IAP 功能
ISP_CMD = 0;//清空命令寄存器
ISP_TRIG = 0;//清空命令觸發(fā)寄存器
ISP_ADDRH = 0;//清空地址高位
ISP_ADDRL = 0;//清空地址低位
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):紅外線解碼初始化
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void IR_Init()
{
TMOD &= 0xF0; //清定時(shí)器0
TMOD |= 0x01; //定時(shí)器0:16位定時(shí)器
TL0 = TH_L; //每步時(shí)間
TH0 = TH_H;
ET0 = 1;
EA = 1;
TR0 = 1;
}
void Delayms(unsigned int dT)
{
unsigned int dA,dB;
for(dA=0; dA<dT; dA++)
for(dB=0; dB<113; dB++)
;
}
//從內(nèi)部EEPROM中讀取鍵值數(shù)據(jù)
void ReadIRData(void)
{
unsigned char j;
for (j=0; j<6; j++)
{
IR_KEY[j][0] = Byte_Read(3 * j);
IR_KEY[j][1] = Byte_Read(3 * j + 1);
IR_KEY[j][2] = Byte_Read(3 * j + 2);
}
}
//鍵值保存到內(nèi)部EEPROM中
void WriteIRData(void)
{
unsigned char j;
Sector_Erase(0);
for (j=0; j<6; j++)
{
Byte_Program(3 * j, IR_KEY[j][0]);
Byte_Program(3 * j + 1, IR_KEY[j][1]);
Byte_Program(3 * j + 2, IR_KEY[j][2]);
}
}
void main(void)
{
unsigned char j;
unsigned char curCh = 0;
#ifdef _DEBUG
UART_init();
Delayms(500);
SendString("start");
#endif
ReadIRData(); //讀EEPROM數(shù)據(jù)
IR_Init(); //紅外接收初始化
while (1)
{
#ifdef _DEBUG
P30 = 1;
if (!P30)
{
ISP_CONTR = 0x60;
}
#endif
if (IR_BT > 0) //正確解碼
{
SendString("R:");
SendChar(ITC[NEC[2]>>4]);
SendChar(ITC[NEC[2]&0x0F]);
if (!KEY_SET) //設(shè)置按鍵按下
{
if (curCh < 6) //6個(gè)通道,超過后丟棄
{
IR_KEY[curCh][0] = NEC[0]; //用戶碼高8位
IR_KEY[curCh][1] = NEC[1]; //用戶碼低8位
IR_KEY[curCh][2] = NEC[2]; //鍵值
curCh++; //下一通道
}
} else { //設(shè)置按鍵未按下或剛松開
if (curCh > 0) //通道值大于0說(shuō)明剛才進(jìn)行了設(shè)置,需要保存鍵值
{
curCh = 0; //清空通道值
WriteIRData(); //保存鍵值
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
代碼要用vs code打開
所有資料51hei附件下載:
仿真程序.7z
(66.89 KB, 下載次數(shù): 57)
2022-3-18 03:38 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
heicad
時(shí)間:
2022-3-18 03:39
好資料,51黑有你更精彩!!!
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1