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

2019-03-28 13:47

uint8 led_zimo[11] =

{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};

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

/*

按键为 4 个,定义及键码分别为:(不可改,否则按键处理时

对不上号)

切换/确认键:EKB_OK = 1 ,用来切换设置状态和显示状态 加键:EKB_ADD = 2 ,焦点数字加 1 减健:EKB_SUB = 4 ,焦点数字减 1

显示模式切换键:EKB_MODE = 8 ,手动切换 时间显示 和

“1234”显示

//--*/ #define EKB_OK 1 #define EKB_ADD 2 #define EKB_SUB 4 #define EKB_MODE 8 //按键信息结构 typedef struct {

uint8 io_s; //按键状态【更新前为上

一次状态,更新后为当前状态】

uint8 io_n; //按键状态连续持续

ticks个数记录

uint8 kb_s; //当前键盘状态【0 - 未

按下;1 - 按下】

uint8 kb_chg; //键盘状态变位标识【1 |

0,读清零,1 时不产生新的状态以等待程序处理】

} T_KB;

//按键状态宏定义 - 按键按下 #define _KBS_PRESS 1 //按键动作宏定义 #define _KBS_FREE 0 //按键未按

#define _KBS_DOWN 1 //按键按下 //按键去抖时间(_KB_DITHERT × 5ms = 去抖时间,可根

据实际情况修改。数字越大,按键越不灵敏)

#define _KB_DITHERT 10 //按键状态缓存 T_KB t_kb[4];

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

11

//当前页面序号(0 - 正常页面,时间和“1234”切换;1 - 时

间设置页面)

uint8 scr_cur = 0;

//当前页面序号备份(上一次的值,用于判断页面切换) uint8 scr_curc = 1;

//自动换屏的定时常数定义(单位:毫秒)- 可根据实际情况

修改,如需要 5秒 自动换屏,则 改为 5000

#define _SCR_AUTOTIME 3000 //闪烁时焦点熄灭的时间定义(单位:毫秒; 显示时间则为 1000

- _SCR_FLASH_HIDETIME)

#define _SCR_FLASH_HIDETIME 300

//闪烁时led不显示任何值(即熄灭)的值的宏定义(在 码表

里 该值 表示 led灯全灭)【该值可改,但建议别改】

#define _LED_KC_BLANK 10

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

//秒计时器(作为当前时间) uint16 value=0,tmr_sec = 0;

//毫秒计时器(累计计时,一直累加) uint16 tmr_ms = 0;

//毫秒计时器(进位计时,用于 分钟的累计) uint16 tmr_ms2 = 0;

//时间变化值宏定义(1 - 时间增加,正计时;-1 - 时间减

小,倒计时,单位:秒。如果要 正计时 的话,改成 1)

uint8

flag=0,flag_2=0,alm1,alm2,flag_10=0,flag_7=0,flag_6=0,num=0;

#define _TMR_CHG -1

//定时器超时定时值(固定为 5ms,所以需要一个 5ms 的定时

器。若你的定时器为 10ms的循环定时器,则将其改为 10)

#define _TMR_TICKTIME 5

void tmr_isr(void); void led_display(void);

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

void delayms(uint8 value) {

uint8 i=0,j=0;

for(j=0;j

void t0_int()

12

{

TMOD=0x11;

TH0=(65536-5000)>>8; TL0=(65536-5000);

TH1=(65536-50000)>>8; TL1=(65536-50000); ET1=1; ET0=1; EA=1; TR0=1; }

void time0() interrupt 1 {

TH0=(65536-5000)>>8; TL0=(65536-5000); TF0=0; tmr_isr(); led_display(); }

void time1() interrupt 3 {

TH1=(65536-50000)>>8; TL1=(65536-50000); TF1=0; num++; }

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

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

** 函数名称 : expend16u ** 输 入 : 起始值,结束值 ** 输 出 : 差值

** 功能描述 : 计算两个数据的线性差值(uint16): 用计算

值的备份值计算,不会因为值的随即变化而影响计算结果

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

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

uint16 expend16u(uint16 istart,uint16 iend) {

if (iend >= istart)

13

return (iend - istart); else return (iend + ((uint16)0xFFFF - istart) + 1); }

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

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

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

** 函数名称 : led_output

** 输 入 : 预显示数据数组首地址 ** 输 出 : 无

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

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

void led_output(uint8 *pdat) {

uint8 i;

for (i = 0; i < 4; i ++) { if ((pdat[i] <= 9) || (pdat[i] == _LED_KC_BLANK)) leds[i] = pdat[i]; //将需要显示的

数据拷贝到显示缓冲区

else leds[i] = _LED_KC_BLANK; }

/* if(num==0) {

for (i = 0; i < 4; i ++) { if ((pdat[i] <= 9) || (pdat[i] == _LED_KC_BLANK)) leds[i] = pdat[i]; //将需要显示的

数据拷贝到显示缓冲区

else leds[i] = _LED_KC_BLANK; } } else {

14

switch(flag_1) {

case 1: leds[0] = pdat[0];leds[1] = 10;leds[2] =

10;leds[3] = 10;break;

case 2: leds[0] = 10;leds[1] = pdat[1];leds[2] = 10;leds[3]

= 10; break;

case 3: leds[0] = pdat[0];leds[1] = pdat[1];leds[2] =

10;leds[3] = 10; break;

} } */ }

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

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

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

** 功能描述 : led数据打印(数据固定为 4 个字符)【即

led输出驱动。。。】

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

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

void led_display(void) {

//在这里把 leds[] 里的数据分别显示到 4 个led上。。。 //leds[0] 为 分钟的十位;leds[1] 为 分钟的个位 //leds[2] 为 秒的十位;leds[3] 为 秒的个位

//leds[?] 里的数为 0-9 时,显示为对应的数字,为

_LED_KC_BLANK(默认为 10) 时,对应的那一位led段码管不亮

uint8 i=0;

static uint8 iled = 0; iled = (iled + 1) % 4; P0 = 0xFF;

switch(iled) {

case 3: P1_3=0; P1_2=1; P1_1=1; P1_0=1; break; case 0: P1_3=1;

15


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

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

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

马上注册会员

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