#include "STC89C52RC.h"
#define BIT(x) 0x01<<x
#define FLAG_RECV_TITLE 0xA5
#define FLAG_RECV_END 0x5A
#define PLED1 P1
#define PLED2 P2
sbit KEY_MODE=P4^2; //MODE按钮
sbit KEY_UP =P3^4; //+按钮
sbit KEY_DOWN=P3^5; //-按钮
sbit K_X=P3^3; //重力感应X
sbit K_Y=P3^2; //重力感应Y
sbit HRD=P4^3; //红外接收脚
unsigned char flag_step=0;
unsigned char flag_dir=0; //重力感测变量 0-左横放 1-倒置 2-正置 3-右横放
unsigned char flag_dir_last=0;//上次重力感测值
unsigned char var_TMAX=10; //控制沙漏速度变量,越大速度越慢 =10时为1S一格
unsigned char var_key=0; //按钮变量
//基本的LED显示笔段表
unsigned char code Disp0[]={
0x00,0x00,0x00,0x00, 0x08,0x00,0x00,0x00, 0x0C,0x00,0x00,0x00, 0x1C,0x00,0x00,0x00,
0x1E,0x00,0x00,0x00, 0x3E,0x00,0x00,0x00, 0x3F,0x00,0x00,0x00, 0x7F,0x00,0x00,0x00,
0x7F,0x04,0x00,0x00, 0x7F,0x0C,0x00,0x00, 0x7F,0x0E,0x00,0x00, 0x7F,0x1E,0x00,0x00,
0x7F,0x1F,0x00,0x00, 0x7F,0x3F,0x00,0x00, 0x7F,0x3F,0x04,0x00, 0x7F,0x3F,0x06,0x00,
0x7F,0x3F,0x0E,0x00, 0x7F,0x3F,0x0F,0x00, 0x7F,0x3F,0x1F,0x00, 0x7F,0x3F,0x1F,0x02,
0x7F,0x3F,0x1F,0x06, 0x7F,0x3F,0x1F,0x07, 0x7F,0x3F,0x1F,0x0F, 0x7F,0x3F,0x5F,0x0F,
0x7F,0x3F,0x7F,0x0F, 0x7F,0x3F,0xFF,0x0F, 0x7F,0x7F,0xFF,0x0F, 0x7F,0xFF,0xFF,0x0F,
0xFF,0xFF,0xFF,0x0F
};
//显示函数1
void ShowDisp1()
{
unsigned char i;
P0=0x00;
for(i=0;i<4;i++)
{
P1=Disp0[flag_step*4+i];
P2=~Disp0[flag_step*4+i];
P0=BIT(i);
P0=0x00;
}
}
//显示函数2
void ShowDisp2()
{
unsigned char i;
P0=0x00;
for(i=0;i<4;i++)
{
P2=Disp0[flag_step*4+i];
P1=~Disp0[flag_step*4+i];
P0=BIT(i);
P0=0x00;
}
}
void Key_Scan(void)
{
if(KEY_UP==0)
{
var_key=1;
while(KEY_UP==0);
}
else if(KEY_DOWN==0)
{
var_key=2;
while(KEY_DOWN==0);
}
else if(KEY_MODE==0)
{
var_key=3;
while(KEY_MODE==0);
}
else
var_key=0;
}
void T0_Init(void) //1毫秒@12.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //开启定时器
}
void T1_Init(void) //50毫秒定时 12MHZ
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x10; //设置定时器模式
TL1 = 0xB0; //设置定时初值
TH1 = 0x3C; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //开启定时器
}
//定时器中断服务函数
void T0_ISR(void) interrupt 1
{
static unsigned char i=0;
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
i++;
if(i>7)
i=0;
//SBUF = P1;
}
void T1_ISR(void) interrupt 3
{
static unsigned char i=0;
TL1 = 0xB0;
TH1 = 0x3C;
i++;
if(i>=var_TMAX)
{
i=0;
//执行1s操作
switch(flag_dir)
{
case 0:
case 3:
return;
break;
case 1:
if(flag_dir_last==2)
flag_step=28-flag_step;
ShowDisp2();
flag_dir_last=1;
break;
case 2:
if(flag_dir_last==1)
flag_step=28-flag_step;
ShowDisp1();
flag_dir_last=2;
break;
}
flag_step++;
if(flag_step>28)
flag_step=28;
}
}
void UART_Init(void)
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF3; //设定定时初值
TH1 = 0xF3; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES = 1; //启用串口中断
}
//串口中断服务函数
void UART_INT(void) interrupt 4
{
static RecvPos=0;
unsigned char temp;
if(RI) //有接收信号
{
RI = 0;
temp = SBUF;
SBUF = temp;
if(temp==FLAG_RECV_TITLE) //接收到起始信号
{
RecvPos=1;
}
else
{
switch(RecvPos)
{
case 1:
P1=temp;
RecvPos++;
break;
case 2:
P2=temp;
RecvPos++;
break;
case 3:
P0=temp;
RecvPos++;
break;
case 4:
RecvPos=0;
break;
}
}
}
if(TI)
{
TI = 0;
}
}
void main(void)
{
UART_Init();
T0_Init();
T1_Init();
//开总中断
EA=1;
while(1)
{
flag_dir = K_X | K_Y * 2; //获取方向
Key_Scan();
switch(var_key)
{
case 1:
if(var_TMAX>1) var_TMAX--;
break;
case 2:
if(var_TMAX<20) var_TMAX++;
break;
}
}
}

SKCQTGZX
- 粉丝: 156
最新资源
- 该项目为一个集数据抓取与展示一体的ACM队员数据系统,基于Django、python实现。.zip
- 辅助背单词软件,基于艾宾浩斯记忆曲线(其实背啥都行)的Python重构版,增加在线查词与翻译等功能.zip
- 基于C开发的命令行输入输出流重定向与实时分析工具_支持快捷按键和文本框输入实时过滤计算分析多格式结果呈现文本提示弹窗曲线表格支持批量测试和日志抓取_用于开发调试协议分.zip
- 各种有用的web api 基于Golang, Python(tornado django scrapy gevent).zip
- 华南理工大学找到卷王,基于 Python 的综测系统数据爬虫.zip
- 湖南大学(HNU)数据库系统课程大作业 ATM系统 前端基于Python的PyQt5,后端基于MySQL.zip
- (新闻爬虫),基于python+Flask+Echarts,实现首页与更多新闻页面爬取
- 基于 Flask + Requests 的全平台音乐接口 Python 版.zip
- 基于 FFmpeg ,使用 Python 开发的批量媒体文件格式转换器。.zip
- 基于 CAI 的 OneBot Python 实现.zip
- 基于 nonebot2 开发的消息交互式 Python 解释器,依赖 docker SDK.zip
- 基于 Python 3 + Django 2 开发的用于适配手机的简单 Jenkins 构建平台.zip
- Python 语言的爬楼梯问题实现-计算爬到第 n 级台阶的方法数
- 基于 Napcat, NcatBot, JMComic-Crawler-Python 的 QQ 机器人。.zip
- 基于 Python Tornado 的博客程序 (练习).zip
- 基于 Python 3.5 + Django 2.0 开发的简单个人博客.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



- 1
- 2
前往页