#include "smg.h" #include "MK60_gpio.h" volatile uint8 segNum[4]; volatile uint8 segXs = 0; // 小数位置 void smg_csh(void) { int i; for(i=0; i<12; i++) gpio_init((PTXn_e)(PTC0+i), GPO, 1); gpio_init(PTC19, GPO, 1); } void smg_xs(int wz, int sz, int xs) //0: 左 12.34 { // int biao[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 }; int biao[10] = {0x80,0xd9,0x44,0x50,0x19,0x12,0x02,0xd8,0x00,0x10 }; int wzbiao[4] = {0x0E, 0x0D, 0x0b, 0x7}; int i; for(i=0; i<8; i++) gpio_set((PTXn_e)(PTC0+i), (biao[sz]>>i)&1); //0xf9 最低位 1111, 1001 & 1 for(i=8; i<12; i++) gpio_set((PTXn_e)(PTC0+i), (wzbiao[wz]>>(i-8))&1); if(xs) gpio_set(PTC19, 0); else gpio_set(PTC19, 1); } void smg_set(int num, int dotPos) { int qian = num/1000; int bai = (num%1000)/100; int shi = (num%100)/10; int ge = num%10; segNum[0] = qian; segNum[1] = bai; segNum[2] = shi; segNum[3] = ge; segXs = dotPos; }

时间: 2024-03-15 21:41:43 浏览: 21
这段代码看起来像是在控制一个数码管显示器。其中包括一个函数用于初始化控制引脚,一个函数用于设置小数点位置和显示数字,以及一个函数用于显示小数。其中,数码管的引脚通过 MK60_gpio.h 中定义的 PTXn_e 枚举类型来表示,而显示的数字则通过一个长度为4的 uint8 数组 segNum 来存储,小数点位置则通过一个 uint8 类型的变量 segXs 来表示。在显示数字时,使用了常见的共阴数码管的编码方式,即通过一个长度为10的数组 biao 来存储每个数字的编码,然后通过按位与操作将数字的每一位对应的引脚控制成高电平或低电平。在显示小数时,则是将小数点对应的引脚控制成低电平。
相关问题

修改C51代码将显示的数字变为285: #include "public.h" #include "24c02.h" #include "key.h" #include "smg.h" #include "lcd1602.h" #define EEPROM_ADDRESS 0 //定义数据存入EEPROM的起始地址 void main() { u8 key_temp=0; u8 save_value=197; u8 save_buf[3]; lcd1602_init(); while(1) { key_temp=key_scan(0); save_value=at24c02_read_one_byte(EEPROM_ADDRESS); if(key_temp==KEY3_PRESS) { save_value++; } else if(key_temp==KEY4_PRESS) { save_value--; } save_buf[0]=save_value/100+48; save_buf[1]=save_value%100/10+48; save_buf[2]=save_value%100%10+48; lcd1602_show_string(0,0,save_buf); at24c02_write_one_byte(EEPROM_ADDRESS,save_value); } }

要将显示的数字变为285,可以将保存的初始值改为285,即将 `u8 save_value=197;` 改为 `u8 save_value=285;`。同时,将显示的位数也要相应地增加,可以将 `u8 save_buf[3];` 改为 `u8 save_buf[4];`,并在计算每位数字时进行相应的修改,具体地,可以将 `save_buf[0]=save_value/100+48;` 改为 `save_buf[0]=save_value/1000+48;`,将 `save_buf[1]=save_value%100/10+48;` 改为 `save_buf[1]=save_value%1000/100+48;`,将 `save_buf[2]=save_value%100%10+48;` 改为 `save_buf[2]=save_value%100/10+48;`,将 `lcd1602_show_string(0,0,save_buf);` 改为 `lcd1602_show_string(0,0,save_buf+1);`。最后,将修改后的代码烧录到目标板上即可。

smg.h添加在哪里

smg.h是一个.h文件,通常用于包含一些类、函数或宏的声明。根据文件名可以推测,它可能与SMG(System Management Gateway,系统管理网关)相关。 一般情况下,smg.h文件应该被添加到需要使用SMG功能的源代码文件中。在C/C++编程中,可以通过使用#include指令来引入smg.h文件。 在添加smg.h文件之前,需要确保文件路径、文件名以及编译器的设置是正确的。一般选择一个源代码文件中的合适位置添加即可,比如主功能函数的上方。可以在需要使用SMG功能的函数上方添加#include "smg.h"语句。 需要注意的是,如果使用的是第三方库或开源代码,需要查看相关文档或示例代码,了解如何正确添加smg.h文件。有时候可能需要按照特定的顺序添加头文件,以确保正确的编译和链接。 总之,smg.h文件应该被添加到需要使用SMG功能的源代码文件中,并且需要符合正确的文件路径、文件名和编译器设置。

相关推荐

对下面代码进行详细解释,解释每一行含义#include "common.h" #include "include.h" #include "dht11.h" uint16 vol[4]; uint8 dispCh = 0; uint8 humi_table1; int buffer[5]; void timer_init(uint16 ms) { pit_init_ms(PIT0, ms); //定时 1000 个bus时钟 后中断 set_vector_handler(PIT0_VECTORn, pit0_hander); // 设置中断复位函数到中断向量表里 enable_irq(PIT0_IRQn); } void KeyDown_Proc(uint8 key) { switch(key) { case 2: // up dispCh++; if(dispCh>3) dispCh=0; break; case 4: // down break; case 5: // enter break; case 11: break; case 12: break; case 8: break; case 9: break; default: break; } } void Key_Proc(void) { mKEY_MSG keyMsg; keyMsg = key_check(); switch(keyMsg.mstatus) { case mKEY_DOWN: KeyDown_Proc(keyMsg.value); printf("k_down = %d\r\n", keyMsg.value); break; case mKEY_HOLD: printf("k_hold = %d\r\n", keyMsg.value); break; default: break; } } void Sensor_init(void) { adc_init(ADC0, AD12); // ptb2 adc_init(ADC0, AD13); // ptb3 adc_init(ADC1, AD10); // ptb4 adc_init(ADC1, AD11); // ptb5 } #define STDVREF 3300 #define STDBIT ((1<<12)) void Sensor_Proc(void) { uint16 adVal; adVal = ad_mid(ADC0, AD12, ADC_12bit); vol[0] = STDVREF*adVal/STDBIT; adVal = ad_mid(ADC0, AD13, ADC_12bit); vol[1] = STDVREF*adVal/STDBIT; adVal = ad_mid(ADC1, AD10, ADC_12bit); vol[2] = STDVREF*adVal/STDBIT; adVal = ad_mid(ADC1, AD11, ADC_12bit); vol[3] = STDVREF*adVal/STDBIT; // printf("%d,%d,%d,%d\r\n", vol[0], vol[1], vol[2], vol[3]); } void beep_init(void) { gpio_init(PTA10, GPO,1); } void beep(void) { gpio_set(PTA10, 0); lptmr_delay_ms(2); gpio_set(PTA10, 1); lptmr_delay_ms(2); } void main() { uint8 te[1][24]; led_init(LED0); ui_init(); timer_init(1); key_init(); smg_csh(); beep_init(); Sensor_init(); while(1) { Sensor_Proc(); Key_Proc(); smg_set(buffer[0],2); //DELAY_MS(20); sprintf((char*)te[0], "Source: %d\0",vol[1]/10); switch(dispCh) { case 0: Init_UI(0); break; case 1: smg_set(vol[1], 2); LCD_Print(4,2,te[0]); if(vol[1]/10>10) { beep(); } break; } //smg_set(vol[1], 5); DELAY_MS(300); LCD_CLS(); //清屏 } }

要求:对下列代码进行注释 代码如下:#include "reg51.h" sbit smg1=P2^0;//数码管 sbit smg2=P2^1; sbit smg3=P2^2; sbit smg4=P2^3; sbit smg5=P2^4; sbit smg6=P2^5; unsigned int a=0,b=0; //输入 unsigned char fuhao=0;//符号 unsigned int c=0;//结果 unsigned char code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9 void delay(unsigned int i)//延时函数 { while(i--); } unsigned char key_scan()//按键检测 { unsigned char i,j; i=0; j=0; P1=0x0f; if(P1!=0x0f) //被按下 { switch(P1)//检测行 { case 0x0e:i=3;break;//第四行 case 0x0d:i=2;break;//第三行 case 0x0b:i=1;break;//第二行 case 0x07:i=0;//第一行 } P1=0xf0; switch(P1)//检测列 { case 0xe0:j=13;break;//第四列 case 0xd0:j=9;break;//第三列 case 0xb0:j=5;break;//第二列 case 0x70:j=1;//第一列 } while(P1!=0xf0);//等待按键松开 } return i+j; } void main()//主函数 { unsigned char i; while(1) { //显示功能 if(fuhao<5) {//第一个数 P0=smgduan[a%10];smg1=0;delay(100);smg1=1;//第一个数 switch(fuhao)//符号 { case 1:P0=0x01;break;//加 case 2:P0=0x40;break;//减 case 3:P0=0x08;break;//乘 case 4:P0=0x80;break;//除 default:P0=0; } smg2=0;delay(100);smg2=1;//符号 P0=smgduan[b%10];smg3=0;delay(100);smg3=1;//第二个数 } else//计算结果 { P0=0x09;smg1=0;delay(100);smg1=1;//等于 //结果 P0=smgduan[c%100/10];smg2=0;delay(100);smg2=1;//十位 P0=smgduan[c%10];smg3=0;delay(100);smg3=1;//个位 } //计算功能 i=key_scan();//检测 if((i>0)&&(i<11))//输入数值 { if(fuhao==0)//第一个数 { a=i-1; } else //第二个数 { b=i-1; } } if(i==13)//加 { fuhao=1; } if(i==14)//减 { fuhao=2; } if(i==15)//乘 { fuhao=3; } if(i==16)//除 { fuhao=4; } if(i==11)//等于 { switch(fuhao) { case 1:c=a+b;break; case 2:c=a-b;break; case 3:c=a;c=c*b;break; case 4:c=a/b; } fuhao=5; } if(i==12)//归零 { a=0; b=0; c=0; fuhao=0; } } }

最新推荐

recommend-type

【静态电流大】SGM2521_ SGM2522 电流限制开关官方数据手册.pdf

【静态电流大】SGM2521_ SGM2522 电流限制开关官方数据手册.pdf
recommend-type

WX小程序源码小游戏类

WX小程序源码小游戏类提取方式是百度网盘分享地址
recommend-type

grpcio-1.47.2-cp310-cp310-musllinux_1_1_x86_64.whl

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

cryptography-42.0.3-cp37-abi3-musllinux_1_1_x86_64.whl

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依