导航:首页 > 操作系统 > pic单片机按键程序

pic单片机按键程序

发布时间:2022-08-20 20:49:09

‘壹’ pic单片机编程用按键控制数码管时,按下按键后数码管会先灭后亮是什么原因

pic没玩过,但按键处理应该和51一样的.你按下按键,防抖用延时10ms吧,这时按下按键,如果没松手,程序一直执行延时程序,当然数码不显示了。
一般方法是防抖调用延时子程序改为调用显示子程序。这样,你按下按键,数码管就会显示。

‘贰’ 我用PIC18F系列单片机写程序后,最简单的C程序,用ISIS 7 Professional仿真失败,有哪位老师指导.

我都说过了,pic单片机需要设置其看门狗那些,你这个程序里没有,不知道你有没有在proteus里设置的,如果没有设置单片机老是复位,程序都跑不了

‘叁’ 帮忙看一下这个PIC单片机的按键电路吧

有些编译器会在main主函数建立循环,所以会出现这种情况,你可以在portd=0xff;后面加上while(1);程序就不会返回main继续循环了。为了证实编译器建立main函数的循环,你还可以这样试试:
void
main()
{
trisd=0;
portd=0;
delay_500ms();//延时500毫秒
portd
=
0xff;
delay_500ms();//延时500毫秒
}
按你的想法,上面这段程序执行到第2个delay_500ms();后就不应该再执行了,但实际情况程序可能会返回main继续循环,结果是8个灯亮500毫秒,灭500毫秒,周而复始。

‘肆’ 求用pic单片机 和74hc595 控制的四位七段数码管显示程序 由三个按键控制 显示数字和字母就可以 求大神

建议你看一下北航的《PIC16系列单片机C程序设计与PROTEUS仿真》一书,其中有74HC164控制的数码管的仿真与实际线路和完整的C程序。164和595是类似的芯片。

‘伍’ pic单片机,键盘控制,休眠唤醒后,五分钟内无任何操作,则又进入休眠状态,程序怎么写啊

你可以启动一个定时器,如每隔一定时间中断,如100ms中断一次,用一个寄存器如TIME来累计中断的次数,显然5分钟需中断3000次。
每次按键中断,程序让TIME清0。因此,只有在5分钟内都没按键,TIME才有可能达到3000。只有当TIME值大于3000时才让单片机进入休眠状态,即在定时器中断时,如果TIME的值超过3000就进入休眠。

‘陆’ 求助:PIC单片机通过按键修改定时器1的初值

我没做过PIC单片机,但是你的原理就是通过中断服务程序还改变定时器的值。我想你首先应该去研究下机器周期也就是时间方面,另一个就是你所测方波的形成原理。

‘柒’ PIC单片机常用模块与综合系统设计实例精讲的目 录

第1章 PIC单片机概述 2
1.1 PIC单片机的特点 2
1.2 PIC单片机的系列产品 5
1.2.1 基本级PIC系列单片机 6
1.2.2 中级PIC系列单片机 6
1.2.3 高级PIC系列单片机 8
1.3 PIC16F87X单片机的硬件
1.3 结构 10
1.3.1 PIC16F87X的主要特色 10
1.3.2 PIC16F87X的内部结构 11
1.3.3 PIC16F87X的引脚功能 16
1.4 本章小结 21
第2章 PIC单片机的CPU和中断系统 22
2.1 PIC单片机的CPU 22
2.1.1 系统配置 22
2.1.2 振荡器配置 24
2.1.3 复位 26
2.1.4 中断 33
2.1.5 监视定时器WDT 33
2.1.6 睡眠模式 35
2.1.7 在线调试 37
2.1.8 程序代码保护 37
2.1.9 用户标识码 37
2.1.10 在线串行编程技术ICSP(In-Circuit Serial Programming) 37
2.2 中断系统 38
2.2.1 中断的基本概念 38
2.2.2 PIC16F87X的中断源及中断逻辑 39
2.2.3 与中断相关的寄存器 44
2.2.4 CPU对中断的处理 48
2.3 本章小结 51
第3章 PIC单片机的指令系统 52
3.1 PIC汇编语言指令格式 53
3.2 PIC16F87X指令集 54
3.3 伪操作指令 60
3.4 寻址方式 64
3.5 本章小结 67
第4章 PIC单片机的开发工具 68
4.1 PIC系列单片机的仿真器 68
4.2 PIC系列单片机的编程器及开发套件 73
4.3 MPLAB-IDE 7.4版集成开发环境 77
4.3.1 MPLAB-IDE 7.4概述 77
4.3.2 MPLAB-IDE 7.4工程创建实例 80
4.3.3 几个常用的菜单项 83
4.4 本章小结 85 第5章 I/O输入输出模块 88
5.1 44扫描键盘设计实例 88
5.1.1 实例说明 88
5.1.2 键盘知识介绍 88
5.1.3 硬件电路设计 90
5.1.4 软件设计 90
5.1.5 实例总结 93
5.2 直接驱动LED显示 94
5.2.1 实例说明 94
5.2.2 LED数码管知识 94
5.2.3 硬件电路设计 94
5.2.4 软件设计 95
5.2.5 实例总结 96
第6章 LCD液晶显示模块:温度测量系统设计实例 97
6.1 实例说明 97
6.2 DS18B20与YMSC-G12864
6.2 IDYEWWD 98
6.2.1 温度传感器DS18B20 98
6.2.2 液晶显示屏YMSC-G12864I-DYEWWD 100
6.3 硬件电路设计 103
6.4 软件设计 105
6.4.1 温度传感器DS18B20的软件设计 105
6.4.2 液晶显示屏YMSC-G12864-IDYEWWD的软件设计 109
6.5 实例总结 116
第7章 定时器模块:用定时器控制端口输出实例 117
7.1 实例说明 117
7.2 定时器Timer0介绍 117
7.3 硬件电路设计 118
7.4 软件设计 119
7.5 实例总结 120
第8章 A/D模块:压力测量系统设计实例 121
8.1 实例说明 121
8.2 A/D转换相关知识 121
8.2.1 A/D转换的原理说明 121
8.2.2 单片机相关寄存器介绍 122
8.2.3 A/D转换操作对时间的要求 124
8.3 硬件电路设计 125
8.4 软件设计 125
8.4.1 程序设计流程 126
8.4.2 程序代码说明 126
8.5 实例总结 128
第9章 存储器模块:基于I2C对EEPROM 24C02的读写 129
9.1 实例说明 129
9.2 24C02与I2C接口介绍 129
9.2.1 24C02简介 129
9.2.2 PIC16F877 I2C接口简介 130
9.2.3 I2C总线规则 130
9.3 硬件电路设计 131
9.4 软件设计 132
9.5 实例总结 136
第10章 比较与检测模块 137
10.1 利用CCP模块控制继电器 137
10.1.1 实例说明 137
10.1.2 定时器TMR1介绍 137
10.1.3 硬件电路设计 139
10.1.4 软件设计 140
10.1.5 实例总结 141
10.2 脉冲频率的检测设计 141
10.2.1 实例说明 141
10.2.2 定时器TMR2介绍 141
10.2.3 硬件电路设计 142
10.2.4 软件设计 143
10.2.5 实例总结 144
10.3 电压测量模块 144
10.3.1 实例介绍 144
10.3.2 硬件电路设计 145
10.3.3 软件设计 145
10.3.4 实例总结 147
第11章 步进电机模块 148
11.1 实例说明 148
11.2 步进电机驱动工作原理 148
11.3 硬件电路设计 149
11.4 软件设计 150
11.4.1 软件设计流程 151
11.4.2 程序代码说明 152
11.5 实例总结 153
第12章 信号发生模块 154
12.1 PWM实现DA转换 154
12.1.1 实例说明 154
12.1.2 PWM模块架构 155
12.1.3 硬件电路设计 156
12.1.4 软件设计程序 157
12.1.5 实例总结 158
12.2 正弦波发生器 158
12.2.1 实例说明 158
12.2.2 TLC5620介绍 158
12.2.3 硬件电路设计 160
12.2.4 软件程序设计 160
12.2.5 实例总结 162
第13章 数字PID控制模块 163
13.1 PID控制概述 163
13.2 位置式PID控制算法 164
13.3 增量式PID控制算法 165
13.3.1 增量式控制算法流程 166
13.3.2 数字PID控制算法的改进 167
13.4 数字PID控制算法代码 168
13.5 实例总结 170
第14章 直流数控稳压电源模块 171
14.1 实例说明 171
14.2 设计思路分析 171
14.2.1 D/A转换器DAC0832 172
14.2.2 步进0.1V实现 172
14.3 硬件电路设计 172
14.3.1 模数转换电路 172
14.3.2 电流放大电路 173
14.3.3 人机接口电路 173
14.3.4 稳压电源电路 174
14.4 软件设计 174
14.4.1 程序设计流程 174
14.4.2 程序代码说明 174
14.5 实例总结 177
第15章 网络通信与数据传输模块 178
15.1 USART串行通信模块实例 178
15.1.1 实例说明 178
15.1.2 打印机并口介绍 178
15.1.3 硬件电路设计 180
15.1.4 软件设计 181
15.1.5 实例总结 182
15.2 I2C总线通信模块实例 182
15.2.1 实例说明 182
15.2.2 I2C总线介绍 183
15.2.3 硬件电路设计 187
15.2.4 软件设计 188
15.2.5 实例总结 195
15.3 SPI总线通信模块实例 195
15.3.1 实例说明 195
15.3.2 SPI模块相关的寄存器 195
15.3.3 硬件电路设计 197
15.3.4 软件设计 198
15.3.5 实例总结 200
15.4 通信模块:CAN总线模块实例 200
15.4.1 实例说明 201
15.4.2 设计思路分析 202
15.4.3 硬件电路设计 206
15.4.4 软件程序设计 207
15.4.5 实例总结 212
15.5 通信模块:USB数据传输模块实例 212
15.5.1 实例说明 212
15.5.2 设计思路分析 213
15.5.3 硬件电路设计 219
15.5.4 USB固件程序设计 220
15.5.5 实例总结 225 第16章 智能手电筒开发实例 228
16.1 系统功能说明 228
16.2 系统工作原理与实现方法 229
16.2.1 系统的供电 229
16.2.2 灯珠和LED点亮或熄灭的实现 229
16.2.3 按键扫描电路和A/D转换电路图原理 230
16.2.4 数据的显示 231
16.2.5 蜂鸣器驱动和背光源驱动 235
16.2.6 电池的自动充电实现 236
16.3 软件设计与代码分析 237
16.3.1 软件设计 237
16.3.2 主程序 239
16.3.3 中断子程序 244
16.3.4 时钟处理子程序 245
16.3.5 2ms到处理子程序 247
16.3.6 A/D中断子程序 252
16.4 实例总结 255
第17章 汽车应急启动器系统开发实例 257
17.1 系统功能说明 257
17.2 系统硬件框图 258
17.3 系统各模块工作原理与实现方法 259
17.3.1 系统电源部分 259
17.3.2 蜂鸣器驱动与系统检测按键扫描电路 259
17.3.3 灯管驱动与灯管按键扫描电路 260
17.3.4 发光二极管驱动与内部电池电压按键扫描电路 261
17.3.5 液晶显示器(LCD)驱动电路 261
17.3.6 内部电池与外部电池连接正确与否检测电路 264
17.3.7 应急启动控制电路 264
17.3.8 轮胎压力检测电路 265
17.3.9 轮胎气泵启动控制与轮胎
17.3.9 充气按键扫描电路 267
17.3.10 加键与减键扫描电路 268
17.3.11 外部电池检测按键扫描电路 269
17.3.12 电池电压检测与电池充电电路 269
17.4 软件设计与代码分析 270
17.4.1 主程序 271
17.4.2 气泵处理程序 280
17.4.3 灯管处理程序 280
17.4.4 外部电池检测程序 282
17.4.5 系统检测程序 283
17.4.6 时钟中断程序 284
17.4.7 内部电池充电程序 288
17.5 实例总结 289
第18章 无功功率补偿控制器设计实例 290
18.1 系统功能说明 290
18.2 系统硬件框图 292
18.3 系统各模块工作原理与实现方法 292
18.3.1 系统的供电 292
18.3.2 按键扫描电路 293
18.3.3 电流和电压相位差检测电路 294
18.3.4 电流和电压的A/D转换电路 297
18.3.5 八段数码管和LED指示灯电路 298
18.3.6 十路电力电容驱动电路 298
18.3.7 EEPROM的驱动电路 300
18.4 软件设计与代码分析 301
18.4.1 初始化、欠流判断和开机按键扫描程序 301
18.4.2 检测电力电容容量程序 308
18.4.3 检测功率因数程序
18.4.3 (主程序) 310
18.4.4 参数设置程序 323
18.5 实例总结 325

‘捌’ 求电子血压计设计 单片机pic16f877的C程序

3 电子血压计工作原理
3.1 血压测量原理定义

血压的概念就是血液流经血管壁时的压力。由心脏出来的血液,需要有推力,才能绕行身体一周,心脏就是借着不停的收缩、放松,将血液推送前进。血压有两种,一是收缩压:是当心脏收缩把血液打到血管所测得的血压,二是舒张压:是心脏在不收缩所得的压力。当袖带的压力等于血压时,血液开始可以流通而产生所谓的袖带声,这时候也就是收缩压,必须开始从这里做记录,直到最后当袖带声没有的时候,此点即为舒张压。

3.2 系统工作原理

系统框图如图2所示。系统由压力传感器(FGN-605PGSR),恒流源(LM324×1),差分放大(LM324×3),0.8 Hz二阶高通滤波(LM324×1),200倍放大(LM324×2),38Hz二阶低通滤波(LM324×1),血压脉冲触发(LM311×1),液晶驱动器(HD44780A)和单片机(PIC16F877)组成。

单片机主要工作为:PWM输出控制气泵充气漏气调整袖带内气压;一路ADC采样袖带内气压直流分量以便取得收缩压和舒张压;一路ADC采样袖带内气压交流分量经分析计算分析后确定收缩压和舒张压的瞬态时间位置;接收血压脉冲信号触发ADC工作;将计算出的收缩压和舒张压结果输出至液晶驱动器显示。

一次测量血压的过程为:按激活键单片机PWM输出控制气泵充气至200 mmHg高,慢慢以每秒约下降5 mmHg的速度放气。压力传感器输出信号经差分放大器后变单端信号一路送入单片机ADC监视直流分量,另一路送入0.8 Hz二阶高通滤波器滤除直流分量;交流分量经200倍放大后输入38 Hz二阶低通滤波器去除电源及皮肤与袖带摩擦的高频噪声和工频干扰并将此信号维持在0~5 V之问,滤波后的交流分量一路送入血压脉冲触发然后触发单片机ADC工作,另一路送入单片机ADC计算幅值,先找出最大振幅值Amax,在往前找幅值为0.5Amax的瞬态位置对应血压直流分量即为收缩压,往后找幅值为0.8Amax的瞬态位置对应血压直流分量即为舒张压,将计算出的收缩压和舒张压结果输出至液晶驱动器显示。血压信号及收缩压和舒张压位置
4 硬件设计

4.1 PIC16F877单片机

时钟输入 外接有源晶振通过OSC1/CLKIN(Pin13)输入8 MHz主频。

电源输入 系统电源为9 V电池,通过外部7805降压到直流5 V输入VDD(Pin11,32)。

按键输入 按键低电平脉冲通过RB0/INT(Pin33)输入,以中断方式触发一次测量血压的过程,中断服务子程序有消除按键抖动的处理。

气泵驱动 RC1(Pin33)为内部PWM模块的输出信道,PWM驱动气泵充气和放气。

喇叭驱动 RC3(Pin37)驱动喇叭输出测量血压时的提示和过程声音。

液晶驱动控制 对HD44780A输出指令和数据进行显示控制,RC.3~5(Pin18,23,24)接HD44780A控制线RS,R/W,EN;RD.0~7(Pin19~22,27~30)接HD44780A数据总线DB0~7。

4.2 提供传感器偏置的恒流源

如图4所示,运放LM324-11输入正端为可设定的直流偏置电压Vref,LM324-11输出端和输入负端提供了压力传感器电桥恒流偏置的回路。

4.3 差分转单端输出的放大电路

经过两个运放LM324-12,13隔离,LM324-14差分放大后其输出电压

4.4 0.8 Hz二阶高通巴特沃思滤波器

采用二阶巴特沃思二阶高通滤波,运放LM324-24接成跟随器放大倍数为1,高通滤波器的传递函数为:

取二阶巴特沃思网络函数的系数a11=1.414,截止角频率ωc=0.8×2π,取C1=C2=0.1μF。

4.5 200倍放大电路

用两个级运放LM324-21,22搭成的比例放大电路,第一级为20倍放大,第二级为10倍放大。

4.6 38Hz二阶低通巴特沃思滤波器

采用二阶巴特沃思二阶低通滤波,运放LM324-23接成跟随器,放大倍数为1,低通滤波器的传递函数为:

取二阶巴特沃兹网络函数的系数a11=1.414,截止角频率ωc=38×2 ,取C3=C4=0.1μF。

4.7 血压脉冲触发

利用比较器LM311设定一定的电压门限,将血压交流信号形成脉冲,输入PIC16F877 RC2的CCP1触发ADC信道1工作。
5 单片机软件设计

5.1 初始化工作

上电后对单片机寄存器,SRAM,特殊功能的设置如PWM,输入输出端口的设置做必要的初始化;对HD44780A输出指令关闭显示。

5.2 按键输入

未按键时RB0/INT(Pin33)端口为大电阻上拉状态,有按键时低电平脉冲通过此端口输入,中断方式触发一次测量血压的过程,进入中断服务子程序后每隔10 ms判断一次端口状态,连续读到3次低电平,则判断按键有效,这是消除按键抖动的处理。判断按键有效后对HD44780A输出指令显示开始测试画面。

5.3 气泵充气

判断按键有效后,PWM输出对气泵充气。停止充气的条件有两个必须同时满足:一是ADC信道0测到的血压直流分量是否大于4 V;二是ADC信道1测到血压交流分量是否介于1.6~4.9 V之间。满足此条件表示气压已足够,可停止充气,一般此时气压略大于200 mmHg。

5.4 测量血压

PWM输出匀速放气。心跳脉冲通过CCP1触发ADC信道1采样血压交流分量测出每个脉冲的峰峰值,同时计算出这个脉冲时间段内ADC信道0测到的血压直流分量的平均值。把峰峰值和直流平均值作为一对数据记录起来,每个心跳脉冲会对应一对数据。 5.5 计算收缩压和舒张压

ADC信道0测到的血压直流分量是否小于1 V表示气压低于50 mmHg,是单次测量结束的标志。然后开始统计记录下来的若干组峰峰值和直流平均值,找出峰峰值最大的值Amax,在往前找峰峰值最接近0.5Amax的一对数据其中血压直流分量即为收缩压,往后找峰峰值最接近0.8Amax的一对数据其中血压直流分量即为舒张压。判断测出收缩压和舒张压的值落在合理的数据范围内,如:收缩压应在80~190 mmHg范围内和舒张压50~120 mmHg范围内。将计算出落在合理数据范围内的收缩压和舒张压结果输出至液晶驱动器显示。

5.6 ADC数据处理

ADC信道1测血压交流分量的采样率为2 kHz,其取值原由为:心跳脉冲频率上限约为2 Hz,定义峰值出现的时间约占心跳脉冲周期的1%,在峰值附近ADC测量10次,所以ADC的采样率=2 Hz/1%×10=2 kHz。因为ADC测量到数据含有电源及皮肤与袖带摩擦的高频噪声,必须经过ADC多次测量才可将噪声造成的异常数据去除,这里采用的做法将多次测量的数据先做比较先去掉个别与大多数数据相差较大的数据,在剩下的数据中取偏大(小)的几个数据做平均从而得到高(低)峰值。

本设计将PIC16F877设置单次数模转换时间为48μs,具体条件为FUSC=8 MHz,TOSC=125 ns,TAD=32TOSC,故单次数模准转换时间TADC=12TAD=12×32×125 ns=48μs。实际上在数模转换前还必须保留20 μs采样保持时间。这种设置采样率的最大值可做到1/(48μs+20 μs)=14.7 kHz远大于要求的2 kHz,故满足要求。ADC信道0测血压直流分量模准转换时间设置与ADC信道1相同,每次采样紧接着ADC信道1采样后进行。

5.7 异常处理
(1) 充气时在限定时间内未满足气压足够高即停止充气的条件,则先放气然后重新充气。连续3次出现此异常,则HD44780A输出错误信息。

(2) 放气时在限定时间内未满足气压足够低即停止血压测量的条件,则放弃此次测量数据再放气然后重新充气并测量。连续3次出现此异常,则HD44780A输出错误信息。

(3) 测量后计算出的收缩压和舒张压未落在合理的数据范围内,则放弃此次测量数据再放气然后重新充气并测量。连续3次出现此异常,则HD44780A输出错误信息。

6 结 语

电子血压计具有低成本、小型化、低功耗、自动化程度高的优点,在使用上带来了便携和易操作的特点,从而使电子血压计呈现出家用化的趋势。本文给出了完整的携带式电子血压计设计方案,并基于PIC 16F877为控制核心辅以压力传感器和外围的模拟电路以及LCD驱动芯片实现了电子血压计的设计。此设计可直接转化为实际产品,故有较高的实用价值。

‘玖’ 我用PIC单片机的RB口做按键输入,8个I/O做16个按键,同时想把这8个I/O用作LED指示灯,要做才能实现谢谢!

这个就只需要8个口就可以实现了,也不需要其他的芯片,运用矩阵电路来连接,再加上程序处理就可以了。关键是程序方面能调试一点,注意避免微导通就行了。自己好好想想,这东西是有点难的。有次参加企业的笔试还碰到这道题,搞得没时间做出来。

‘拾’ Pic单片机RA0,RA1通过按键接地,判断RA0,RA1的状态来执行相应的操作.为什么总执行第一个if语句的内容

光设置TRISA是不够的。
你看一下datasheet,引脚编号上面有顺序的,例如AN0/CLK1/RA0。这个顺序表明了引脚IO的优先级,也就是AN0是最优先的,其次是CLK1这个口,最后才是RA0。如果你打开了AN0或者CLK1口,那RA0永远读0。

解决方法:一般最容易出现的是ANSEL(模拟信号使能)开启,导致IO口变为模拟口。
设置ANSEL寄存器为1,让RA0 RA1都是数字口即可(默认是模拟口)。
如果上面的方法不行,你也要逐一查看优先级比RA0高的外设是否被不小心打开了。

我还有一次是在configuration里面使能了JTAG口,结果正好是我要用的那个IO口,导致IO口失效。

引用原文:
Setting an
ANSx bit high will disable the associated digital input
buffer and cause all reads of that pin to return ‘0’ while
allowing analog functions of that pin to operate
correctly.

阅读全文

与pic单片机按键程序相关的资料

热点内容
编译原理遍的过程 浏览:251
python读取json字符串 浏览:61
ubuntu1404安装php 浏览:628
lua能编译吗 浏览:106
思仙怎么看服务器 浏览:656
php微信图片防盗链 浏览:796
安卓1怎么读音 浏览:287
农业app怎么开通快捷支付 浏览:910
pythonredisdict 浏览:385
如何攻击别人网赌服务器 浏览:880
隐私与应用加密的图案密码 浏览:38
陈情令王一博解压 浏览:39
c编译器使用说明 浏览:707
郑州前端程序员私活有风险吗 浏览:14
小型螺杆机压缩机 浏览:520
成人解压最好的方法 浏览:52
最小制冷压缩机 浏览:492
xampp支持python 浏览:371
深圳周立功单片机 浏览:61
圆上点与点之间角度算法 浏览:869