全国电子大赛模拟路灯控制系统(4)

2019-03-28 13:47

P1_2=1; P1_1=1; P1_0=0; break; case 1: P1_3=1; P1_2=1; P1_1=0; P1_0=1; break; case 2: P1_3=1; P1_2=0; P1_1=1; P1_0=1; break; }

// for (i = 0; i < 250; i ++);

if (iled == 1) P0 = led_zimo[leds[iled]] & (0x7F); else P0 = led_zimo[leds[iled]]; }

//--------------------------------------------------------------------------------------------------------//

/*****************************************************

****************************************************

** 函数名称 : kb_init ** 输 入 : 无 ** 输 出 : 无

** 功能描述 : 按键初始化

******************************************************

****************************************************/

void kb_init(void) {

uint8 i;

for (i = 0; i < 4; i ++) { t_kb[i].io_s = 0; t_kb[i].io_n = 0; t_kb[i].kb_s = 0; t_kb[i].kb_chg = 0; } }

/*****************************************************

16

****************************************************

** 函数名称 : kb_updata

** 输 入 : 切换确认键的当前状态,加键当前状态,减

键当前状态,模式键当前状态

** 输 出 : 无

** 功能描述 : 键盘扫描状态更新:按键未按下时为 0;按

键按下时为 1。【注意 参数顺序别错了,否则相当于按键被交换了】

******************************************************

****************************************************/

void kb_updata(uint8 iok, uint8 iadd, uint8 isub, uint8 imode) {

uint8 i,k,n;

n = (iok == _KBS_PRESS) | ((iadd == _KBS_PRESS) << 1) | ((isub == _KBS_PRESS) << 2) | ((imode == _KBS_PRESS) << 3) ; for (i = 0; i < 4; i ++) { k = ((n & (1 << i)) != 0);

//获得 键盘扫描状态

if (t_kb[i].io_s != k) {

//两次间状态不同,重置累计数据

t_kb[i].io_n = 1; } else t_kb[i].io_n ++; t_kb[i].io_s = k;

//更新当前状态到状态缓存,用于下一次判定时使用

if (t_kb[i].io_n >= _KB_DITHERT) {

//去抖动ok后,进行实质性判断,否则,保持现状

if (t_kb[i].io_s == _KBS_PRESS) {

//键按下状态

if (t_kb[i].io_n == _KB_DITHERT) {

//按键去抖后产生的“按下”动作

t_kb[i].kb_s = _KBS_DOWN; t_kb[i].kb_chg = 1; } } else

17

{

//键弹起状态,复位状态

t_kb[i].kb_s = _KBS_FREE; } t_kb[i].io_n = _KB_DITHERT; } } }

/*****************************************************

****************************************************

** 函数名称 : kb_getstatus ** 输 入 : 无

** 输 出 : 当前按键状态

** 功能描述 : 获得按键状态,按键状态按键码放置

******************************************************

****************************************************/

uint8 kb_getstatus(void) {

uint8 i,r; r = 0;

for (i = 0; i < 4; i ++) { r |= ((t_kb[i].kb_chg == 1) << i); //将 按下的按

键状态 输出

t_kb[i].kb_chg = 0; }

return r; }

//--------------------------------------------------------------------------------------------------------//

/*****************************************************

****************************************************

** 函数名称 : tmr_updata ** 输 入 : 无 ** 输 出 : 无

** 功能描述 : led数据准备(数据固定为 4 个字符) ******************************************************

****************************************************/

void tmr_updata(void) {

tmr_ms += _TMR_TICKTIME;

18

tmr_ms2 += _TMR_TICKTIME; if (tmr_ms2 >= 1000) { //累计计时超过

1秒,进行秒计时器的操作

tmr_sec += _TMR_CHG; //秒计数器更新 if (tmr_sec >= 6000) tmr_sec = 0; //计时超过 100 分

钟的限制后,强制为 0。倒计时时表现为 计时到0后停止变化。

tmr_ms2 -= 1000; //毫秒计时器数

字更新

} }

/*****************************************************

****************************************************

** 函数名称 : tmr_isr ** 输 入 : 无 ** 输 出 : 无

** 功能描述 : 定时器中断服务程序执行内容:定时器为

5ms 循环 定时

** : 把本程序放到 5ms 的定时器中断服务程序中,

按要求给定键盘输入参数。

******************************************************

****************************************************/

void tmr_isr(void) {

//计时更新 tmr_updata();

//按键状态更新:按要求给定键盘输入参数。。。 kb_updata(P2_1==0, P2_2==0, P2_3==0,P2_4==0); }

//--------------------------------------------------------------------------------------------------------//

/*****************************************************

****************************************************

** 函数名称 : scr_normal

** 输 入 : 按键状态,是否初始化页面[1 - 初始化] ** 输 出 : 无

** 功能描述 : 正常显示模式的页面程序

******************************************************

****************************************************/

void scr_normal(uint8 ikb, uint8 bfresh) {

19

static uint16 scr_auto_tmr = 0; //自动循环显示的计时

器,用于页面的定时切换

static uint8 iscr = 0; //时间 和 “1234”显示选

择(0 - 显示时间(不换屏);1 - 显示时间(换屏);2 - 显示“1234”(换屏))

uint8 i,k; uint8 tmp[4];

if (bfresh) { //屏幕切换进来时初始

化内容

scr_auto_tmr = tmr_ms; //自动页面切换计时器

更新

iscr = 0; //进入页面时默认显示 时

}

// if(flag_1!=0)if(iscr==0)iscr=1; if ((((alm1 || alm2)&&(flag_10))||((alm1 ||

alm2)&&(flag_7==1))) && (iscr == 0)) iscr = 1;

if (!(((alm1 || alm2)&&(flag_10))||((alm1 ||

alm2)&&(flag_7==1))))iscr = 0;

if (iscr == 2) {

// num=1; //显示“1234” P2_0=1;

tmp[0] = tmp[1] = tmp[2] = tmp[3] = 0x0A; switch(flag_10) { case 1:tmp[0] = 1;break; case 2:tmp[0] = 2;break; } if(flag_7==1) { if (alm1) tmp[0] = 1; if (alm2) { if (alm1) tmp[1] = 2; else tmp[0] = 2; } }

20


全国电子大赛模拟路灯控制系统(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:梁赛 城市轨道交通概念、站务员、城市轨道交通安全管理 教学计划

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: