资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
/*程序功能:在八位数码管上显示数字 */ #include typedef unsigned char uchar; typedef unsigned int uint;/共阴极数码管 7 位段码:0-f uchar scandata16 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/记录显示位数的全局变量 uchar cnt = 0;/*主函数*/ void main(void) WDTCTL = WDT_ADLY_1000; / 设置内部看门狗工作在定时器模式,1.9ms 中 断一次IE1 |= WDTIE; / 使能看门狗中断P5DIR = 0xff; /设置 P5 的 IO 方向为输出 P3DIR |= 0x18; /设置 P3.3 P3.4 的 IO 方向为输出P3OUT /设置 P3.3 P3.4 为 0,关闭两锁存器P5OUT = 0x00;/设置 P5 的输出初值_BIS_SR(LPM3_bits + GIE); /CPU 进入 LPM3 低功耗模式,同时打开全局中断/_BIS_SR(CPUOFF+ GIE); /进入 LPM0/_BIS_SR(LPM0_bits + GIE); /进入 LPM0 /*函数名称:watchdog_timer 功 能:看门狗中断服务函数,在这里输出数码管的段选和位选信号 参 数:无 返回值 :无 */ #pragma vector=WDT_VECTOR _interrupt void watchdog_timer(void) P5OUT = 0x00;P5OUT = scandatacnt; /输出段选信号P3OUT |= 0x10;P3OUT P5OUT = 0xfe; /输出位选信号cnt+; /位计数变量在 015 之间循环P3OUT |= 0x08;P3OUT if(cnt = 16) cnt = 0; /*程序功能:在数码管上动态显示数字 */ #include typedef unsigned char uchar; typedef unsigned int uint; #define LED_IN_USE 8/共阴极数码管 7 位段码:0-f uchar scandata16 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar led_BufLED_IN_USE; / LED 显示缓冲区 ,/ 存放要显示数据 uchar led_Ctrl; /* 模块初始化 */ void init_LED(void)uchar tmpv;P5DIR = 0xff; /设置 P5 的 IO 方向为输出 P3DIR |= 0x18; /设置 P3.3 P3.4 的 IO 方向为输出 P3OUT /设置 P3.3 P3.4 为 0,关闭两锁存器P5OUT = 0x00;/设置 P5 的输出初值led_Ctrl = 0; / led_Ctrl 用于控制哪个 LED 可显示for(tmpv=0;tmpv typedef unsigned char uchar; typedef unsigned int uint; #define LED_IN_USE 8/共阴极数码管 7 位段码:0-f uchar scandata16 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar led_BufLED_IN_USE; / LED 显示缓冲区 ,/ 存放要显示数据 uchar led_Ctrl;/记录显示位数的全局变量uchar key_Pressed; /按键是否被按下:1-是,0-否 uchar key_val; /存放键值 uchar key_Flag; /按键是否已放开:1-是,0-否 /设置键盘逻辑键值与程序计算键值的映射 uchar key_Map = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16; uchar Dispbuf2;/* 模块初始化 */ void init_LED(void)/uchar tmpv;P5DIR = 0xff; /设置 P5 的 IO 方向为输出 P3DIR |= 0x18; /设置 P3.3 P3.4 的 IO 方向为输出 P3OUT /设置 P3.3 P3.4 为 0,关闭两锁存器P5OUT = 0x00;/设置 P5 的输出初值led_Ctrl = 0; / led_Ctrl 用于控制哪个 LED 可显示/for(tmpv=0;tmpv=1; if (P1IN tmp-); /*函数名称:Key_Event 功 能:检测按键,并获取键值 参 数:无 返回值 :无 */ void Key_Event(void) uchar tmp;P1OUT / 设置 P1OUT 全为 0,等待按键输入tmp = P1IN; / 获取 p1INif (key_Pressed = 0x00) / 如果有按键按下,设置 key_Pressed 标识delay(); /消除抖动Check_Key(); / 调用 check_Key(),获取键值 else if (key_Pressed = 1) / 清除 key_Pressed 标识key_Flag = 1; / 设置 key_Flag 标识else _NOP(); /*主函数*/ void main(void) WDTCTL = WDT_ADLY_1_9; / 设置内部看门狗工作在定时器模式,1.9ms 中断 一次IE1 |= WDTIE; / 使能看门狗中断init_LED();_EINT(); /打开全局中断Init_Keypad();while(1)Key_Event();if(key_Flag = 1)key_Flag = 0;Dispbuf0 = key_val / 10;Dispbuf1 = key_val % 10;/ _BIS_SR(GIE);/_BIS_SR(LPM3_bits + GIE); /CPU 进入 LPM3 低功耗模式,同时打开全局中断/_BIS_SR(CPUOFF+ GIE); /进入 LPM0/_BIS_SR(LPM0_bits + GIE); /进入 LPM0 /*函数名称:watchdog_timer 功 能:看门狗中断服务函数,在这里输出数码管的段选和位选信号 参 数:无 返回值 :无 */ #pragma vector=WDT_VECTOR _interrupt void watchdog_timer(void) led_Display();
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号