历史上的今天
今天是:2024年11月18日(星期一)
2019年11月18日 | PIC单片机开发板独立键盘扫描+蜂鸣器响+数码管 C程序代码
2019-11-18 来源:51hei

/*
为自已写的独立键盘扫描+蜂鸣器响+数码管
犯的错:unsigned密写成了unsigner一直提示找不到a,b
PORTD0=1;不行,要写成PORTD=0x01;才可以,经实验证得没有PORTD0没这个东西,应为RD0=1;
PORTD=0x03;不是第三个灯亮,而是0000 0011是两个灯亮
PORTD=0x8则是0000 1000是第4个灯亮。。。。。出错因原进制转化,刚开始写程序进制转化混掉了。
*/
#include #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); const unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //数码管数组 uchar key_num; void delay(uint x) //延时函数 { uint a,b; for(a=x;a>0;a--) for(b=110;b>0;b--); } void scan(); //扫描键盘函数 声明 void didi(uchar num); //蜂鸣器响 函数 声明 void disp(uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6,uchar num7); //数码管显示 声明 //----------------------------------------------------------------------------------- void init() //初始化函数 { TRISA=0x00; TRISB=0xff; TRISC=0X00; TRISD=0x00; TRISE=0x00; PORTC=0Xff; PORTD=0x00; } //-------------------主函数----------------------------------------------------------- void main() { init (); while(1) { scan(); //扫描键盘 disp(key_num,2,3,4,5,6,7,8); //后面的直接传给数码管而第一个是几,我们要用键盘来检测,则第一个变量由key_num } } //------------------------------------------------------------------------------------- void didi(uchar num) //蜂鸣器函数,num响几声 { uchar di_num; //di_num响几声 for(di_num=num;di_num>0;di_num--) { RE0=1; delay(100); RE0=0; delay(50); } } void scan() { if(RB0==0) { delay(10); if(RB0==0) { didi(1); while(!RB0); // PORTD=0x01; //若写成RD0=1;也可,不过呢,会出现灯亮了之后不会灭掉,还得加清零(灭灯) key_num=1; } } if(RB1==0) { delay(10); if(RB1==0) { didi(2); while(!RB1); // PORTD=0x02; key_num=2; } } if(RB2==0) { delay(10); if(RB2==0) { didi(3); while(!RB2); // PORTD=0x04; key_num=3; } } if(RB3==0) { delay(10); if(RB3==0) { didi(4); while(!RB3); // PORTD=0x08; key_num=4; } } } //---------------------------数码管显示函数,数组------------------------------------------------ void disp(uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6,uchar num7) { PORTD=table[num0]; PORTA=0x00; //第一个数码管选通 delay(2); //延时,显示2ms PORTD=table[num1]; PORTA=0x02; //第二个数码管选通 delay(2); //延时,显示2ms PORTD=table[num2]; PORTA=0x04; //第三个数码管选通 delay(2); //延时,显示2ms PORTD=table[num3]; PORTA=0x06; //第四个数码管选通 delay(2); //延时,显示2ms PORTD=table[num4]; PORTA=0x08; //第五个数码管选通 delay(2); //延时,显示2ms PORTD=table[num5]; PORTA=0x0A; //第六个数码管选通 delay(2); //延时,显示2ms PORTD=table[num6]; PORTA=0x0c; //第七个数码管选通 delay(2); //延时,显示2ms PORTD=table[num7]; PORTA=0x0e; //第八个数码管选通 delay(2); //延时,显示2ms }
史海拾趣
|
在组合逻辑中,有时候需要使输出一脚的驱动能力加强,就要用集电极开路的输出引脚。 但是两者差别不大,只是在调用时,从不同的库中调用。 集电极开路的输入与非门电路调用STD库的std_ttloc包集合,二一般的输入与非门电路则调用std库的std-tll包 ...… 查看全部问答> |
|
如何让机械表省电←省电精灵c卡预付费电表控制器※电表倒转QQ:272208552 电话:13115998303 如何让插卡电表倒走,【网站打不开请点百度快照】如何使电表慢走 电表倒转的原因 ic卡电表偷电方法 电表节电器控制器电表控制器,电表干扰器:微电脑控表器 ...… 查看全部问答> |
|
使用winio方式动态加载ctrl2cap.sys,无法createFile 各位高人我现在学习键盘过滤驱动,用ctrl2cap改的,可是我却不能动态加载,我使用winio的形式做,发现能启动服务,但是在services.msc中找不到(我用同样方式做的一个应用程序的服务,就可以找到). 但是却不能打开hanlde. HANDLE hDriver = CreateF ...… 查看全部问答> |
|
有一组数据,存放在文本文件里面,格式是: \"时间1\" \"数据1\" \"时间2\" \"数据2\" . . . \"时间N\" \"数据N\" 要求打印相关数据的曲线图~~ 想了半天头都想痛了~给源代码的再加100分… 查看全部问答> |
|
关于shell里面 d 查看内存数据命令的详细用法 ---在线等 关于shell里面 d 查看内存数据命令的详细用法,没有在网上查到,很困扰 只知道简单的使用 d 0x1231231这个命令,但是显示多长,何种格式显示如何设置就不清楚了… 查看全部问答> |
|
上海新成立物联网公司招募创业团队!!!-待遇:工资+奖金+上市期权 上海新成立物联网公司定位为物联网行业解决方案供应商,为行业客户提供物联网应用全面解决方案!美国上市公司投资、注册资金1000万,目标2年内上市待遇:工资+项目奖金+上市前分配期权现招聘创业团队,.NET方面开发人员,RF工程师、硬件工程师、mcu ...… 查看全部问答> |
|
我现在要用FPGA做一个 ICX274CCD 驱动 里面有AD9949,问题来了 AD9949里面的双采样SHP SHD 默认 SHP = 0X24 SHD = 0X00 可是我老觉得不对 我觉得SHP=0x18 而SHD = 0x56 才对 各位大哥 到底是用默认值还是要自己设定 ...… 查看全部问答> |




