protues软件仿真(按键编程经验)

2023.7.25
非常荣幸19年的关于proteus 软件仿真的相关博文收到大家的关注,因本人能力有限,不能及时回复大家的评论区,现将19年本人所做过的关于51单片机的仿真文件和程序源文件开源给大家,如有问题欢迎大家讨论。
开源的链接地址
链接总是出错,可以进入我的文章里面进行查找开源的文章(本身没几篇比较好找)


proteus 软件仿真之按键

大二电子专业小白一名,平时闲来无事在学校老师实验室自学,自学过程中发现一些有困扰到自己的地方,所以特来此记录。一是当作自己学习笔记;二是有幸帮助到有和自己遇到相同问题的童鞋,也是一大善事。应个人水平能力有限,错误之处还请及时纠正。

protues软件在对按键程序仿真时因扫描时序问题易出现执行多次函数问题

	if(S2==0||S3==0||S4==0||S5==0)			
		{
			delay_ms(100);										
			if(S2==0)			
			{
			//按键执行函数->对变量temH 做自增
				temH++;	
			}			
			/* 其它按键省略 */
			 

上诉代码在仿真期间出现按下一下按键执行多次变量自增,一下为解决办法 (利用while语句等待按键松开)

if(S2==0||S3==0||S4==0||S5==0)			
		{
			delay_ms(100);										
			if(S2==0)			
			{
			//按键执行函数->对变量temH 做自增
				temH++;			
				while(!S2);	
				/* 注意在使用时一定要在while语句前 */
			}			
			

注意按键执行函数一定要在while语句前 ,如果在while语句后使用会没有效果。

反思:protues等仿真软件与现实有一定使用差异但由可解决办法
2019年6月8日

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,如果您使用的是Proteus作为硬件仿真平台,C语言作为编程语言,可以按照以下步骤实现: 1. 修改键盘扫描程序 在C语言,可以通过循环语句来实现键盘扫描。对于4*3的键盘,可以使用以下代码来扫描: ```c for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { // 检查第i行第j列的按键是否被按下 if (key_matrix[i][j] == 0) { // 按键被按下,发送对应的ASCII码 send_data(key_value[i][j]); } } } ``` 其,`key_matrix`是一个二维数组,表示键盘的按键矩阵;`key_value`是一个二维数组,表示按键对应的ASCII码。在循环,检查每个按键是否被按下,如果是,则发送对应的ASCII码。 2. 修改译码程序 在C语言,可以使用数组来实现译码。对于“0”-“9”这10个字符,可以使用以下代码来定义: ```c char key_code[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; ``` 在扫描程序,如果检测到按键被按下,则可以根据按键的位置来获取对应的ASCII码,例如: ```c // 获取按键的位置 int row = 0, col = 0; for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { if (key_matrix[i][j] == 0) { row = i; col = j; break; } } } // 获取按键对应的ASCII码 char key = key_code[row * 4 + col]; ``` 3. 发送数据到显示屏 在Proteus,可以使用串口模块来发送数据到显示屏。可以使用以下代码来发送数据: ```c // 发送数据到串口 void send_data(char data) { while(!TI); // 等待上一个字符发送完成 SBUF = data; // 发送数据 TI = 0; // 标志位清零 } ``` 在发送数据之前,需要先配置串口的波特率等参数。可以使用以下代码进行配置: ```c // 配置串口 void init_serial() { // 设置波特率为9600 TMOD &= 0x0F; TMOD |= 0x20; TH1 = 0xFD; TL1 = 0xFD; TR1 = 1; // 设置串口工作模式 SCON = 0x50; // 允许串口断 ES = 1; EA = 1; } ``` 需要注意的是,这些代码只是一个简单的示例,具体实现可能需要根据实际情况进行调整。另外,还需要在程序添加断服务程序,以便处理串口断和键盘断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G.Z.W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值