久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
單片機(jī)紅外遙控計(jì)算器源碼(個(gè)位數(shù)相加)
[打印本頁(yè)]
作者:
1061700625
時(shí)間:
2017-12-5 17:21
標(biāo)題:
單片機(jī)紅外遙控計(jì)算器源碼(個(gè)位數(shù)相加)
通過(guò)紅外遙控,實(shí)現(xiàn)簡(jiǎn)單地計(jì)算器,并通過(guò)數(shù)碼管顯示出來(lái)
0.png
(7.29 KB, 下載次數(shù): 61)
下載附件
2017-12-5 22:24 上傳
單片機(jī)源程序如下:
#include "stc15.h"
#include "intrins.h"
#include "gpio.h"
#include "uart.h"
#include "595hc.h"
#define MAIN_Fosc 11059200L //定義主時(shí)鐘
#define SysTick 10000 // 次/秒, 系統(tǒng)滴答頻率, 在4000~16000之間
#define Timer0_Reload (65536UL - ((MAIN_Fosc + SysTick/2) / SysTick)) //Timer 0 中斷頻率, 在config.h中指定系統(tǒng)滴答頻率, 在4000~16000之間.
u8 i=0,j,k;
u8 number;
u8 cnt_1ms; //1ms基本計(jì)時(shí)
bit B_1ms; //1ms標(biāo)志
/************* 紅外接收程序變量聲明 **************/
sbit P_IR_RX = P3^6; //定義紅外接收輸入IO口
u8 IR_SampleCnt; //采樣計(jì)數(shù)
u8 IR_BitCnt; //編碼位數(shù)
u8 IR_UserH; //用戶碼(地址)高字節(jié)
u8 IR_UserL; //用戶碼(地址)低字節(jié)
u8 IR_data; //數(shù)據(jù)原碼
u8 IR_DataShit; //數(shù)據(jù)移位
bit P_IR_RX_temp; //Last sample
bit B_IR_Sync; //已收到同步標(biāo)志
bit B_IR_Press; //安鍵動(dòng)作發(fā)生
u8 IR_code; //紅外鍵碼
u16 UserCode; //用戶碼
/*********************************/
#define IR_SAMPLE_TIME (1000000UL/SysTick) //查詢時(shí)間間隔, us, 紅外接收要求在60us~250us之間
#if ((IR_SAMPLE_TIME <= 250) && (IR_SAMPLE_TIME >= 60))
#define D_IR_sample IR_SAMPLE_TIME //定義采樣時(shí)間,在60us~250us之間
#endif
#define D_IR_SYNC_MAX (15000/D_IR_sample) //SYNC max time
#define D_IR_SYNC_MIN (9700 /D_IR_sample) //SYNC min time
#define D_IR_SYNC_DIVIDE (12375/D_IR_sample) //decide data 0 or 1
#define D_IR_DATA_MAX (3000 /D_IR_sample) //data max time
#define D_IR_DATA_MIN (600 /D_IR_sample) //data min time
#define D_IR_DATA_DIVIDE (1687 /D_IR_sample) //decide data 0 or 1
#define D_IR_BIT_NUMBER 32 //bit number
#define SysTick 10000 // 次/秒, 系統(tǒng)滴答頻率, 在4000~16000之間
//*******************************************************************************************
//**************************** IR RECEIVE MODULE ********************************************
void IR_RX_NEC(void)
{
u8 SampleTime;
IR_SampleCnt++; //Sample + 1
F0 = P_IR_RX_temp; //Save Last sample status
P_IR_RX_temp = P_IR_RX; //Read current status
if(F0 && !P_IR_RX_temp) //Pre-sample is high,and current sample is low, so is fall edge
{
SampleTime = IR_SampleCnt; //get the sample time
IR_SampleCnt = 0; //Clear the sample counter
if(SampleTime > D_IR_SYNC_MAX) B_IR_Sync = 0; //large the Maxim SYNC time, then error
else if(SampleTime >= D_IR_SYNC_MIN) //SYNC
{
if(SampleTime >= D_IR_SYNC_DIVIDE)
{
B_IR_Sync = 1; //has received SYNC
IR_BitCnt = D_IR_BIT_NUMBER; //Load bit number
}
}
else if(B_IR_Sync) //has received SYNC
{
if(SampleTime > D_IR_DATA_MAX) B_IR_Sync=0; //data samlpe time too large
else
{
IR_DataShit >>= 1; //data shift right 1 bit
if(SampleTime >= D_IR_DATA_DIVIDE) IR_DataShit |= 0x80; //devide data 0 or 1
if(--IR_BitCnt == 0) //bit number is over?
{
B_IR_Sync = 0; //Clear SYNC
if(~IR_DataShit == IR_data) //判斷數(shù)據(jù)正反碼
{
UserCode = ((u16)IR_UserH << 8) + IR_UserL;
IR_code = IR_data;
B_IR_Press = 1; //數(shù)據(jù)有效
}
}
else if((IR_BitCnt & 7)== 0) //one byte receive
{
IR_UserL = IR_UserH; //Save the User code high byte
IR_UserH = IR_data; //Save the User code low byte
IR_data = IR_DataShit; //Save the IR data byte
}
}
}
}
}
//*********************************** MODULE END ********************************************
//*******************************************************************************************
///********************** Timer0初始化 ************************/
void Timer0Init(void) //1毫秒 @11.0592MHz
{
AUXR = 0x80; //定時(shí)器時(shí)鐘1T模式
TMOD = 0x00; //設(shè)置定時(shí)器模式
TL0 = (u8)(Timer0_Reload % 256); //設(shè)置定時(shí)初值
TH0 = (u8)(Timer0_Reload / 256); //設(shè)置定時(shí)初值
EA = 1; //開啟總中斷
ET0 = 1; //允許定時(shí)器0中斷
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
}
///********************** Timer0中斷函數(shù) ************************/
void timer0 (void) interrupt 1
{
IR_RX_NEC();
if(--cnt_1ms == 0)
{
cnt_1ms = SysTick / 1000;
B_1ms = 1; //1ms標(biāo)志
DisplayScan(); //1ms掃描顯示一位
}
}
int Addend; //數(shù)
int Augend; //被數(shù)
int Sum_Sub; //和_差
int Middle_Number; //中間數(shù)
int Buffer; //緩沖暫存
bit Catch_Flag = 0;
u8 Addition_Flag = 0;
void main(void)
{
GPIO();
Timer0Init();
cnt_1ms = SysTick / 1000;
for(i=0; i<8; i++) LED8[i] = 16;
LED8[0] = 12; //C
LED8[1] = 10; //A
LED8[2] = 21; //L
LED8[3] = 12; //C
LED8[4] = 25; //U
LED8[5] = 21; //L
LED8[6] = 10; //A
LED8[7] = 17; //-
while (1)
{
if(B_1ms) //1ms到
{
B_1ms = 0;
if(B_IR_Press) //檢測(cè)到收到紅外鍵碼
{
B_IR_Press = 0;
// LED8[0] = (u8)((UserCode >> 12) & 0x0f); //用戶碼高字節(jié)的高半字節(jié)
// LED8[1] = (u8)((UserCode >> 8) & 0x0f); //用戶碼高字節(jié)的低半字節(jié)
// LED8[2] = (u8)((UserCode >> 4) & 0x0f); //用戶碼低字節(jié)的高半字節(jié)
// LED8[3] = (u8)(UserCode & 0x0f); //用戶碼低字節(jié)的低半字節(jié)
// LED8[6] = IR_code >> 4;
// LED8[7] = IR_code & 0x0f;
switch(IR_code)
{
case 0x16: Middle_Number = 0;Catch_Flag = 1;
break;
case 0x0C: Middle_Number = 1;Catch_Flag = 1;
break;
case 0x18: Middle_Number = 2;Catch_Flag = 1;
break;
case 0x5E: Middle_Number = 3;Catch_Flag = 1;
break;
case 0x08: Middle_Number = 4;Catch_Flag = 1;
break;
case 0x1C: Middle_Number = 5;Catch_Flag = 1;
break;
case 0x5A: Middle_Number = 6;Catch_Flag = 1;
break;
case 0x42: Middle_Number = 7;Catch_Flag = 1;
break;
case 0x52: Middle_Number = 8;Catch_Flag = 1;
break;
case 0x4A: Middle_Number = 9;Catch_Flag = 1;
break;
case 0x07: Middle_Number = 10;Catch_Flag = 1; // -
break;
case 0x15: Middle_Number = 11;Catch_Flag = 1; // +
break;
case 0x09: Middle_Number = 12;Catch_Flag = 1; // =
break;
}
if(Catch_Flag == 1)
{
Catch_Flag = 0;
if(Addition_Flag == 0)
{
First:
for(i=0;i<8;i++) LED8[i] = 16; //清屏
Augend = Middle_Number;
LED8[0] = Augend;
Addition_Flag = 1;
}
else if(Addition_Flag == 1)
{
Buffer = Middle_Number;
if((Buffer - 10) < 0) goto First; //如果不是符號(hào),則跳轉(zhuǎn)
if(Buffer == 10) LED8[1] = 17;
if(Buffer == 11) LED8[1] = 24;
Addition_Flag = 2;
}
else if(Addition_Flag == 2)
{
Addend = Middle_Number;
LED8[2] = Addend;
Addition_Flag = 3;
}
if(Middle_Number == 12)
{
if(Buffer == 10)
{
Sum_Sub = Augend - Addend;
if(Sum_Sub < 0)
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
紅外遙控 - 計(jì)算器(個(gè)位數(shù)相加).rar
(43.2 KB, 下載次數(shù): 34)
2017-12-5 17:20 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产精品久久久久久久久免费相片
|
国产a级毛毛片
|
精品久久久久久
|
中文字幕第7页
|
国产在线视频三区
|
免费亚洲视频
|
国产精品色婷婷久久58
|
最新国产精品精品视频
|
夜夜骑首页
|
日本特黄a级高清免费大片 特黄色一级毛片
|
日韩有码在线观看
|
久久国产亚洲
|
婷婷综合网
|
久久久久久久一级
|
天天看天天操
|
一级免费看片
|
亚洲精品一区二区在线观看
|
91福利在线观看
|
四虎影视一区二区
|
国产精品国产三级国产aⅴ原创
|
国产精品99久久久精品免费观看
|
青青草华人在线视频
|
国产在线视频一区二区
|
中文字幕av在线一二三区
|
国产福利二区
|
日韩欧美在线一区
|
av网站在线播放
|
天天爽一爽
|
国产一级大片
|
国产精品久久网
|
九一精品
|
一区二区视频
|
亚洲欧美在线一区
|
成人国产午夜在线观看
|
国产精品久久久久久久久久久免费看
|
国产精品99久久久久久人
|
精品久久久久久久久久久久
|
av一区二区三区
|
av在线成人
|
精品视频久久久久久
|
国产一在线观看
|