一个红色图标的c语言单片机编程软件,叫m开头的还是w开头的忘掉了,在线等,有用

晨曦导师教护眼 2024-05-23 21:09:59
最佳回答
下列程序已经调好,按键显示电路可见://单片机:使用51系列兼容的即可;//4×4矩阵键盘:接在p1口;//两位数码显示器: p0口输出七段码,p2口输出位选码。/========================================//c语言程序如下。/************************************************************* * 文件名: key_led.c * 功能 : 对4×4矩阵键盘进行输出,在数码管后两位显示按键值。 **************************************************************/ #include <reg51.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned charuchar code table[10] = ; uchar sec, t_50ms;/************************************************************** * 名称 : delay_1ms() * 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无 ***************************************************************/ void delay_1ms(uint x) { uint i; uchar j; for(i = 0; i < x; i++) for(j = 0; j <= 148; j++); } /************************************************************** * 名称: d**play(uchar k) * 功能: 将参数分成十位、个位分别显示* 输入: k (键盘数值) * 输出: p0口输出七段码,p2口输出位选码***************************************************************/ void d**play(uchar k){ p2 = 0; //消隐 p0 = table[k / 10]; p2 = 0x02; delay_1ms(5); //显示5ms十位 p2 = 0; //消隐 p0 = table[k % 10]; p2 = 0x01; delay_1ms(5); //显示5ms个位 }/************************************************************** * 名称: keyscan() * 功能: p1外接4×4按键, 按照扫描法读出键值* 输出: 按键值0~15/如无键按下, 返回16***************************************************************/ uchar keyscan(void) { uchar i, j, temp, buffer[4] = ; for(j = 0; j < 4; j++) { //循环四次 p1 = buffer[j]; //在p1高四位分别输出一个低电平 temp = 0x01; //计划先判断p1.0位 for(i = 0; i < 4; i++) { //循环四次 if(!(p1 & temp)) //从p1低四位,截取1位 return (i + j * 4); //返回取得的按键值 temp <<= 1; //判断的位,左移一位 } } return 16; //判断结束,没有键按下,返回16} //呵呵,实质性的语句不过8行,就是这么简练!/************************************************************** * 名称: getkey() * 功能: 读出按键、消抖、等待按键释放* 输出: 按键值0~15/如无键按下, 返回16***************************************************************/ uchar getkey(void) { uchar key_temp1, key_temp2; //两次读出的键值 p1 = 0xff; key_temp1 = keyscan(); //先读入按键 if(key_temp1 == 16) return 16; //没有键按下,返回16 d**play(sec); //用显示代替延时 key_temp2 = keyscan(); //再读一次按键 if(key_temp1 != key_temp2) return 16; //不同,返回16 while(keyscan() < 16) //等待按键释放 d**play(sec); //等待期间显示 return key_temp1;} /************************************************************** * 名称 : main() * 功能 : 主函数 ***************************************************************/ void main(void) { uchar key_value; //读出的键值 sec = 0; tmod = 0x01; th1 = (65536-50000)/256; tl1 = (65536-50000)%256; tr0 = 1; et0 = 1; ea = 1; while(1) { d**play(sec); //显示 if (getkey() == 10) { tr0 = 0; while (tr0 == 0) { d**play(sec); //显示 key_value = getkey(); if (key_value < 10) { sec %= 10; sec = sec * 10 + key_value; } if (key_value == 10) tr0 = 1; } } } }/************************************************************** * 名称 : t0_int() * 功能 : t0中断函数***************************************************************/ void t0_int() interrupt 1{ th1 = (65536-50000)/256; tl1 = (65536-50000)%256; t_50ms++; if(t_50ms >= 20) { t_50ms = 0; sec++; sec %= 60; }}/*************************************************************/ 20210311
汇率兑换计算器

类似问答
汇率兑换计算器

热门推荐
热门问答
最新问答
推荐问答
新手帮助
常见问题
房贷计算器-九子财经 | 备案号: 桂ICP备19010581号-1 商务联系 企鹅:2790-680461

特别声明:本网为公益网站,人人都可发布,所有内容为会员自行上传发布",本站不承担任何法律责任,如内容有该作者著作权或违规内容,请联系我们清空删除。