/*#include<reg52.h> #define uint unsigned int #define uchar unsigned char #define uchar unsigned char sbit K1=P3^4; sbit K2=P3^5; sbit ledr=P1^0; sbit ledg=P1^1; sbit ledb=P1^2; bit LEDDirection=0;//LED控制方向0:渐亮1:渐灭 char pwm=0; char pwmr=0; char scw=0;//中断记数 char tt=0; char n; void dealy(uint z); void Timer0Init(void) { TMOD=0x01; TH0=0xff; TL0=0x47; EX0=1; IT0=0; PX0=1; ET0=1; TR0=1; EA=1; } void main() { Timer0Init(); while(1){ if(K1==0) { dealy (1); if(K1==0) {TR0=1; ledr=0; dealy(5); TR0=0; } } if(K2==0) { dealy (1); if(K2==0) { while(1) { ledr=0; //亮 dealy(100-n*10); ledr=1; //熄 dealy(n*10); } } } } } void Time0Isr(void) Interrupt 1 { // pwm=0; TH0=0xff; TL0=0x47; scw++; }*/ #include<reg52.h> #define uchar unsigned char bit LEDDirection=0; sbit P2_0=P1^0; sbit key1=P3^4; sbit key2=P3^5; sbit key3=P3^6; uchar zkb,i,t;// zkb指占空比 uchar pwm; void delay(uchar z) { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void init() //初始化函数 { TMOD=0X01; TH0=(65536-1000)/256; TL0=(65536-1000)%256; EA=1; ET0=1; TR0=1; } void keyscan() //键盘扫描 { P3=0XFF; if(key1==0) { delay(5); if(key1==0) { while(!key1); if(zkb<9) { zkb++; } } } if(key2==0) { delay(5); if(key2==0) { while(!key2); if(zkb>0) { zkb--; } } } if(key3==0) {TR0=1; delay(5); if(key3==0) {while(!key3); if((zkb<=9)&&(0==LEDDirection)) { zkb++; if(zkb>9) { LEDDirection=1; zkb=9; } } if((zkb>=0 )&&(1==LEDDirection)) { zkb--; if(zkb<0 ) { LEDDirection=0; zkb=0 ; //dealy(3000); } } } //pwm=pwmr; } } void main() //主函数 { zkb=2; init(); while(1) { keyscan(); } } void time0(void) Interrupt 1 //中断函数 { TH0=(65536-200)/256; TL0=(65536-200)%256; ++i; if(i>10) { i=0; }; if(i<=zkb) { P2_0=1; } else P2_0=0; } /*void time0(void) Interrupt 0 //中断函数 { TH0=(65536-1000)/256; TL0=(65536-1000)%256; ++i; if(i>10) { i=0; }; if(i<=zkb) { P2_0=1; } else P2_0=0; }*/
标签: 调光
上传时间: 2016-07-02
上传用户:184890962
在本课中,我们要用一个按键来实现跑马灯的 10 级调速。这又会涉及到键的去抖的问 题。 本课的试验结果是,每按一次按键,跑马速度就降低一级,共 10 级。 这里我们又增加了一个变量 speedlever,来保存当前的速度档次。 在按键里的处理中,多了当前档次的延时值的设置。 请看程序: ―――――――――――――――― #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long #include <reg52.h> //包括一个 52 标准内核的头文件 sbit P10 = P1^0; //头文件中没有定义的 IO 就要自己来定义了 sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3; sbit K1= P3^2; bit ldelay=0; //长定时溢出标记,预置是 0 uchar speed=10; //设置一个变量保存默认的跑马灯的移动速度 uchar speedlever=0; //保存当前的速度档次 char code dx516[3] _at_ 0x003b;//这是为了仿真设置的 //一个按键控制的 10 级变速跑马灯试验 void main(void) // 主程序 { uchar code ledp[4]={0xfe,0xfd,0xfb,0xf7};//预定的写入 P1 的值 uchar ledi; //用来指示显示顺序 uint n; RCAP2H =0x10; //赋 T2 的预置值 0x1000,溢出 30 次就是 1 秒钟 RCAP2L =0x00; TR2=1; //启动定时器 ET2=1; //打开定时器 2 中断 EA=1; //打开总中断 while(1) //主程序循环 { if(ldelay) //发现有时间溢出标记,进入处理 { ldelay=0; //清除标记 P1=ledp[ledi]; //读出一个值送到 P1 口 ledi++; //指向下一个 if(ledi==4) { ledi=0; //到了最后一个灯就换到第一个 } } if(!K1) //如果读到 K1 为 0 { for(n=0;n<1000;n++); //等待按键稳定 while(!K1); //等待按键松开 for(n=0;n<1000;n++); //等待按键稳定松开 speedlever++; if(speedlever==10)speedlever=0; speed=speedlever*3; //档次和延时之间的预算法则,也可以用查表方法,做出 不规则的法则 } } } //定时器 2 中断 timer2() Interrupt 5 { static uchar t; TF2=0; t++; if((t==speed)||(t>30)) //比较一个变化的数值,以实现变化的时间溢出,同时限制了最慢速 度为 1 秒 { t=0; ldelay=1;//每次长时间的溢出,就置一个标记,以便主程序处理 } } ―――――――――――――――――――――― 请打开 lesson11 目录的工程,编译,运行,看结果: 按 K1,速度则降低一次,总共 10 个档次。
上传时间: 2017-11-06
上传用户:szcyclone
LED 一般是恒流操作的,如何改变 LED 的亮度呢?答案就是 PWM 控制。在一定的 频率的方波中,调整高电平和低电平的占空比,即可实现。比如我们用低电平点亮一个 LED 灯,我们假设把一个频率周期分为 10 个时间等份,如果方波中的高低电平占空比是 9:1, 这是就是一个比较暗的亮度,如果方波中高低电平占空比是 10:0,这时,全部是高电平, 灯是灭的。如果占空比是 5:5,就是一个中间亮度,如果高低比是 1:9,是一个比较亮的 亮度,如果高低是 0:10,这时全部是低电平,就是最亮的。 实际上应用中,电视屏幕墙中的几十百万 LED 象素都是这样控制的,而且每一个象素 都有红绿蓝 3 个 LED,每个 LED 可以变化的亮度是几百到几万或者更多的级别,以实现真 彩色的显示。还有在您的手机中,背光灯的亮度如果是可以变化的,也应该是这种工作方式。 目前的城市彩灯也有很多都使用了 LED,需要控制亮度是也是 PWM 控制。 下面来分析我们的例程,在这个例程中,我们将定时器 2 溢出定为 1/1200 秒。每 10 次脉冲输出一个 120HZ 频率。这每 10 次脉冲再用来控制高低电平的 10 个比值。这样,在 每个 1/120 秒的方波周期中,我们都可以改变方波的输出占空比,从而控制 LED 灯的 10 个 级别的亮度。 为什么输出方波的频率要 120HZ 这么高?因为如果频率太低,人眼就会看到闪烁感 觉。一般起码要在 60HZ 以上才感觉好点,120HZ 就基本上看不到闪烁,只能看到亮度的变 化了。 下面请看程序,程序中有比较多的注释: ――――――――――――――――――――――― #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long #include <reg52.h> //包括一个 52 标准内核的头文件 sbit P10 = P1^0; //要控制的 LED 灯 sbit K1= P3^2; //按键 K1 uchar scale;//用于保存占空比的输出 0 的时间份额,总共 10 份 char code dx516[3] _at_ 0x003b;//这是为了仿真设置的 //模拟 PWM 输出控制灯的 10 个亮度级别 void main(void) // 主程序 { uint n; RCAP2H =0xF3; //赋 T2 的预置值,溢出 1 次是 1/1200 秒钟 RCAP2L =0x98; TR2=1; //启动定时器 ET2=1; //打开定时器 2 中断 EA=1; //打开总中断 while(1) //程序循环 { ;//主程序在这里就不断自循环,实际应用中,这里是做主要工作 for(n=0;n<50000;n++); //每过一会儿就自动加一个档次的亮度 scale++; if(scale==10)scale=0; } } //1/1200 秒定时器 2 中断 timer2() Interrupt 5 { static uchar tt; //tt 用来保存当前时间在一秒中的比例位置 TF2=0; tt++; if(tt==10) //每 1/120 秒整开始输出低电平 { tt=0; if(scale!=0) //这里加这一句是为了消除灭灯状态产生的鬼影 P10=0; } if(scale==tt) //按照当前占空比切换输出高电平 P10=1; } ―――――――――――――――――― 在主程序中,每延时一段时间,就自动换一个占空比,以使亮度自动变化,方便观察。 编译,运行,看结果。 可以看到,LED 的亮度以每种亮度 1 秒左右不断变化,共有 10 个级别。
上传时间: 2017-11-06
上传用户:szcyclone
include<reg52.h> #define uint unsigned int #define uchar unsigned char uint temp,aa,wang,qian,bai,shi,ge; sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void display( uint wang,uint qian,uint bai,uint shi,uint ge); void delay(uint z); void init(); void main() { init();//初始化子程序 while(1) { if(aa==20) { aa=0; temp++; if(temp==99999) { temp=0; } wang=temp/10000; qian=(temp-wang*10000)/1000; bai=(temp-wang*10000-qian*1000)/100; shi=(temp-wang*10000-qian*1000-bai*100)/10; ge=temp%10; } display(wang,qian, bai,shi,ge); } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(uint wang,uint qian,uint bai,uint shi,uint ge) { dula=1; P0=table[wang]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1); dula=1; P0=table[qian]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(1); dula=1; P0=table[bai]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1); dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(1); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delay(1); } void init() { wela=0; dula=0; temp=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void timer0() Interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; } include<reg52.h> #define uint unsigned int #define uchar unsigned char uint temp,aa,wang,qian,bai,shi,ge; sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void display( uint wang,uint qian,uint bai,uint shi,uint ge); void delay(uint z); void init(); void main() { init();//初始化子程序 while(1) { if(aa==20) { aa=0; temp++; if(temp==99999) { temp=0; } wang=temp/10000; qian=(temp-wang*10000)/1000; bai=(temp-wang*10000-qian*1000)/100; shi=(temp-wang*10000-qian*1000-bai*100)/10; ge=temp%10; } display(wang,qian, bai,shi,ge); } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(uint wang,uint qian,uint bai,uint shi,uint ge) { dula=1; P0=table[wang]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1); dula=1; P0=table[qian]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(1); dula=1; P0=table[bai]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1); dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(1); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delay(1); } void init() { wela=0; dula=0; temp=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void timer0() Interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; } include<reg52.h> #define uint unsigned int #define uchar unsigned char uint temp,aa,wang,qian,bai,shi,ge; sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void display( uint wang,uint qian,uint bai,uint shi,uint ge); void delay(uint z); void init(); void main() { init();//初始化子程序 while(1) { if(aa==20) { aa=0; temp++; if(temp==99999) { temp=0; } wang=temp/10000; qian=(temp-wang*10000)/1000; bai=(temp-wang*10000-qian*1000)/100; shi=(temp-wang*10000-qian*1000-bai*100)/10; ge=temp%10; } display(wang,qian, bai,shi,ge); } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(uint wang,uint qian,uint bai,uint shi,uint ge) { dula=1; P0=table[wang]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1); dula=1; P0=table[qian]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(1); dula=1; P0=table[bai]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1); dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(1); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delay(1); } void init() { wela=0; dula=0; temp=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void timer0() Interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; }
标签: 矩阵式键盘
上传时间: 2021-12-18
上传用户:2590813506
基于STC89C51单片机的智能电热水器的控制器的设计,要达到的控制要求有:(1)用LCD1602液晶显示水温、设置上下限和定时时间,(2)水温检测显示范围为00~99℃,精度为±1℃。(3)温度预设范围为0~99℃,当检测温度低于预设温度时,开始加热;检测温度高于预设温度时,停止加热。(4)设置4个程序按键。分别问设置按键、加键、减键、确定。(5)可以红外遥控,通过红外一体接收探头接收遥控器信号,执行与主板按键同等功能。(6)有水位检测功能,无水自动上水,无水不加热。//外部中断解码程序_外部中断0void intersvr1(void) Interrupt 2 using 1{ TR0=1; Tc=TH0*256+TL0;//提取中断时间间隔时长 TH0=0; TL0=0; //定时中断重新置零 if((Tc>Imin)&&(Tc<Imax)) { m=0; f=1; return; } //找到启始码 if(f==1) { if(Tc>Inum1&&Tc<Inum3) { Im[m/8]=Im[m/8]>>1|0x80; m++; } if(Tc>Inum2&&Tc<Inum1) { Im[m/8]=Im[m/8]>>1; m++; //取码 } if(m==32) { m=0; f=0; if(Im[2]==~Im[3]) { IrOK=1; TR0=0; } else IrOK=0; //取码完成后判断读码是否正确 } //准备读下一码 }}
上传时间: 2022-05-14
上传用户:
RX-8801 SA Features built-in 32.768 kHz DTCXO, High Stability Supports l'C-Bus's high speed mode (400 kHz)Alarm Interrupt function for day, date, hour, and minute settings Fixed-cycle timer Interrupt function Time update Interrupt function32.768 kHz output with OE function Auto correction of leap years Wide interface voltage range: 2.2 V to 5.5 V Wide time-keeping voltage range:1.8 V to 5.5 V Low current consumption: 0.84A/3V (Typ.)is an IC bus interface-compliant real-time clock which includes a 32.768 kHz DTCXO In addition to providing a calendar (year, month, date, day, hour, minute, second) function and a clock counter function, this module provides an abundance of other functions including an alarm function, fixed-cycle timer unction, time update Interrupt function, and 32.768 kHz output function.The devices in this module are fabricated via a C-MOS process for low current consumption, which enables ong-term battery back-up.
上传时间: 2022-06-17
上传用户:
1.特色(CY7C68013A/14A/15A/16A)■USB 2.0USB IF 高速性能且经过认证(TID#40460272)■单芯片集成USB2.0收发器、智能串行接口引擎(SIE)和增强型8051微处理器■适用性、外观和功能均与FX2兼容a引脚兼容口目标代码兼容a功能兼容(FX2LP是超集)■超低功耗:lcc在任何模式下都不超过85mA a适合总线和电池供电的应用软件:8051代码运行介质:3内部RAM,通过USB下载口内部RAM,从EEPROM加载口外部存储设备(128引脚封装)■16K字节片上代码/数据RAM■四个可编程的BULK/Interrupt/ISOCHRONOUS 端点口缓冲区大小选项:两倍,三倍,四倍■附加的可编程(BULK/Interrupt)64位端点■8位或16位外部数据接口■可生成智能介质标准错误校正码ECC
标签: usb
上传时间: 2022-06-25
上传用户:zhaiyawei
The GD32F103xx device is a 32-bit general-purpose microcontroller based on the ARM?Cortex?-M3 RISC core with best ratio in terms of processing power, reduced power consumption and peripheral set. The Cortex?-M3 is a next generation processor core whichis tightly coupled with a Nested Vectored Interrupt Controller (NVIC), SysTick timer and advanced debug support.The GD32F103xx device incorporates the ARM ' Cortex?-M3 32-bit processor core operating at 108 MHz frequency with Flash accesses zero wait states to obtain maximumefficiency. It provides up to 3 MB on-chip Flash memory and up to 96 KB SRAM memory. An extensive range of enhanced I/Os and peripherals connected to two APB buses. The devices offer up to three 12-bit ADCs, up to two 12-bit DACs, up to ten general-purpose
标签: gd32f103
上传时间: 2022-07-23
上传用户:aben
VIP专区-嵌入式/单片机编程源码精选合集系列(101)资源包含以下内容:1. TMS320C54x Interrupt.2. C54 instruction.3. 电闹钟的设计与制作 电闹钟的设计与制作电闹钟的设计与制作.4. STR71x的BSPI与M25P10-A串行闪存通信.5. DN503 -- SPI Access (Rev. A).6. 这个rt12864的驱动是我自己摸索了很久才做出来的,因为这块液晶的真正权威的能参考的绘图资料真的是太少了,所以我上传上来,算是做点贡献吧.7. GBK点阵字体的显示.8. PCI接口产品中桥芯片PLX6000、PLX8000、PLX9000、PLXsrv系列的驱动模块源代码.9. PCI接口产品中桥芯片PLX6000、PLX8000、PLX9000和PLXsrv驱动模块源码.10. 很好的资料,很好的芯片,做电机驱动用得到的.11. 红外成像跟踪处理器的研制.12. 51单片机上模拟i2c传输的程序.13. 一个类STL的多平台可移植的算法容器库,主要用于嵌入式系统编程时的内存管理等方面.14. 红外遥控键值解码1602液晶显示 红外遥控器键值如下: 10 03 01 06 09 1D 1F 0D 19 1B 11 15 17 12 16 4C 40 48 04 00 02.15. AT51单片机与蜂鸣器奏乐连接演奏(生日快乐).16. 一个用西门子200编的勾数计数程序.17. This guide describes Freescale’s BeeKit Wireless Connectivity Toolkit configuration tool used for Zi.18. This manual describes Freescale’s IEEE™ 802.15.4 Standard compliant MAC/PHY software. The Frees.19. 闻亭TDS560仿真器中的驱动TEST文件夹.20. plc文件.21. atmega8+vs1003+sd卡MP3.22. 康芯公司GWDBVP开发板的原理图.23. ESS3890+SL原代码(1*16内存).24. 嵌入式系统相关:周立功EasyArm2131开发板原理图的真正Protel版本(绝非无耻的PDF版本!).25. Nios II 处理器中文小册子(altera) NIOS开发板APEX20K版数据手册 niosii资料-软件开发文档 北航NIOS教程.26. C语言51单片机程序.27. 基于51单片机的控制的红外线通信.28. 基于51单片机控制电机或舵机等.29. 智能电加热温控系统的研制.kdh 整体说明与设计.30. 8255可编程并行扩展接口位控功能的应用.caj.31. 2401 接受程序.32. 基于ARM7 LPC2114学习板程序。学习板提供的是ADS源码.33. 提供收音模块的操作代码.可以操作各种收音模块.34. 嵌入式系统设计师大纲 很辛苦找到的东东.35. nucleus 2006 source code.36. 芯片测试讲义.37. i2c存储体系在arm9平台上实现的资料.38. 一种新型的独立CAN通信控制器MCP2515;给出其在CAN总线系统智能节点中的一个应用实例.39. 该书是网卡芯片AMD973的开发手册,专用于常用网卡芯片开始使用,驱动程序员需要..40. 嵌入式常用的字库工具,可以由BMP文件生成字库,也可根据TEXT生成字库,也可生成字模.总之功能强大,要不也不叫完美版了!.
标签: 天线
上传时间: 2013-07-04
上传用户:eeworm
VIP专区-嵌入式/单片机编程源码精选合集系列(131)资源包含以下内容:1. nand flash k9f1208 的基于ARM 的读写源代码..2. str711的I2C通讯的例程,分给大家..3. Interrupt handler for at91rm92.4. 希尔伯特-黄变换的c程序.5. 关于嵌入式系统C语言变成规范的文档。十分实用..6. 搜集的一款LABWINDOWS/CVI温度采集显示用户界面设计源程序..7. MAX809MAX810三管脚的微处理器复位芯片.8. RS232在DSP2812通信中的编程程序.9. 这是2006年北京航空航天大学的嵌入式系统课件.10. S3C2410核心板的PCB图.11. 某位高人总结的关于pcb问题的集合,呵呵.12. 128X64点阵屏 51测试程式.13. 本书不能让你系统的学习嵌入式技术.14. 华恒嵌入式的培训资料.15. 初学者在面对一个嵌入式开发项目的时候.16. 一个用adtlc2543采样电视波形,显示波形的51程序.17. 介绍了实现IPv4向IPv6过渡的隧道技术6to4.18. 一本很好的程序员的书.19. 一本很好的学习嵌入式的书.20. 嵌入式控制器硬件设计_英文版 关于嵌入式控制器硬件设计的一本很好的东西.21. arm 9 IIS 音频实验程序 s3c2410.22. 可用于quantus下 FPGA jtag和AS下载的下载器PCB图.23. 键盘处理程序,针对51系列4*4键盘扫描程序.24. DA和液晶显示 DA芯片将数字转换为模拟并显示.25. HDLC FCS 源码 ,PIC C30.26. pid 算法的简单程序.27. T6963液晶显示屏驱动函数,在应用时只需调用就行。.28. 一各有關I2C送信息給LED的程序 很好用的說.29. 以MSP430來實現低通濾波 很不錯的範例.30. 利用MSP430來實現DA轉換 罕布錯用的.31. 基于PAL16BIT的基本程序,MP3的控制程序及音量调节程序.主要涉及GLITCH FREE DESIGN. 适合初学者..32. 智能小车导航.33. 使用大恒采集卡的图像显示.34. O Reilly-programming_embedded_systems_in_C_and_C++ 非常好的嵌入式编程书籍.35. Vishay的protel库文件.36. Attend的protel库文件.37. SUMSUNG2440的datasheet,已翻译成中文..38. 实时嵌入式操作系统uC_OS_II在ARM9上的移植应用.39. TSM320C5000系列控制SPI25128器件的代码.40. tcpmp外挂字幕插件subs_src 源码.
上传时间: 2013-04-15
上传用户:eeworm