实现6位频率计,防止数据溢出,并对频率进行三分频
标签: 频率计
上传时间: 2017-07-02
上传用户:Divine
实现任意长的2个整数相加 但是有个BUG,就是当最高位溢出时,就缺少最高位的1
上传时间: 2013-12-10
上传用户:924484786
一个深度为32,字长为8_bit FIFO(先进先出)寄存器,有寄存器空、寄存器满和寄存器溢出信号。
标签:
上传时间: 2014-01-06
上传用户:徐孺
由8031内部定时器1,按方式1工作,即作为16位定时器使用 每0.05秒钟T1溢出中断一次。P1口的P1.0-P1.7分别接八个发 光二极管。要求编写程序模拟一时序控制装置。开机后第一 秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四 秒钟L6,L8亮,第五秒L1,L3,L5,L7亮,第六秒钟L2,L4, L6,L8亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后又 从头开始,L1,L3亮,然后L2,L4亮......一直循环下去。
上传时间: 2013-12-20
上传用户:hullow
微机原理与接口知识点总结: 1.绪论:计算机系统组成;冯诺依曼体系结构;进制之间的转换;数的原码、反码、补码表示;补码加减法运算;溢出判断 2.通用计算机工作原理:指令格式;存储器模型;程序如何自动执行 3.CPU工作原理:CPU的基本构成(运算器、控制器、寄存器),各个部分的功能;CPU的工作原理;CPU的具体实例8086内部结构;8086的地址构成(逻辑地址与物理地址关系);8086存储器分段概念;8086存储器组织(存储顺序);8086的外部引脚;8086处理器的基本时序。
标签: 接口资料1
上传时间: 2016-01-03
上传用户:glylgw
/**************************************************************** 外部晶振8M PA0~3:四位数码管的位选 PB0~7:数码管的8位段选 外部中断0用于计数 定时器0溢出中断的定时为1ms 说明 :检测到水流较小时,继电器延时1秒关闭 ******************************************************************/ #include<iom16v.h> #include<macros.h> #define uchar unsigned char #define uint unsigned int char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //数码管段选 char position[4]={0xfe,0xfd,0xfb,0xf7};//数码管位选 uint sumnum=0; //用于记录1000ms内进入中断的次数 uint time=0; //记录进入比较定时器0的次数 uint num=0; //记录1ms内进入中断的次数 uint count=0; //进入外部中断0的次数 uchar flag; uint sumnum1; //记录100ms内的数目 /***************************函数声明***************************/ void delay(); void display(uint m ); void init(); void init_0(); void init_2(); void _delay_us(uint l) { unsigned int i; for(i=0;i<l;i++) { asm("nop"); } } /**************************主函数***********************************/ void main() { init(); init_0(); init_2(); while(sumnum<5) { PORTD=0XBF; segdisplay(sumnum1); } while(1) { segdisplay(sumnum1); } } /*************************扫描数码管时的延时函数*********************/ void delay() { uchar i,j; for(i=6;i>0;i--) for(j=225;j>0;j--); } /************************数码管显示函数*****************************/ void segdisplay( int temp) { int seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int temp1,temp2,temp3,temp4; temp1=temp/1000; temp2=(temp/100)%10; temp3=(temp/10)%10; temp4=temp%10; DDRB=0xff; DDRA|=0x0f; PORTA=~BIT(3); PORTB=seg[temp1]; _delay_us(100); PORTA=~BIT(2); PORTB=seg[temp2]; _delay_us(100); PORTA=~BIT(1); PORTB=seg[temp3]; _delay_us(100); PORTA=~BIT(0); PORTB=seg[temp4]; _delay_us(100); } /***********************管脚初始化函数*********************/ void init() { DDRD|=0X40; //PD4 设置为输出 PORTD=0XBF; DDRA=0XFF; DDRB=0XFF; PORTA=0XFF; PORTB=0XFF; } /***********************外部中断0初始化*********************/ void init_0() { MCUCR=0X02; //INT0为下降沿触发 GICR=0X40; //使能INT0中断 SREG=0X80; //使能总中断 } /**********************定时器2初始化***********************/ void init_2() { TCCR0=0x03; // 内部时钟,64 分频(8M/64=125KHz) TCNT0=0x83; //装初值 TIMSK=0x01; // 允许 T/C0溢出中断中断 } /***********************外部中断0子函数********************/ #pragma interrupt_handler int0_isr:2 void int0_isr(void) { count++; } /*********************定时计数器0溢出中断子函数*****************/ #pragma interrupt_handler int0_over:10 void int0_over(void) { TCNT0=0x83; //重装初值 if((time%100) == 0) sumnum1 = num; if(time == 1000) { sumnum=num; if(sumnum<10) { if((flag==1)&&(sumnum<10)) { PORTD=0XFF; flag=0; } flag++; } else PORTD=0XBF; num=0; time=0; } num+=count; count=0; ++time; }
标签: C语言
上传时间: 2016-03-09
上传用户:彦 yan
在本课中,我们要用一个按键来实现跑马灯的 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
型 号:VK1625 / 品牌 VINTEK/VINKA/元泰 封装形式:QFP100 LQFP100 DICE裸片 COB邦定片 定制COG 基本说明 VK1625是一个外围设备专门设计的I / O型微控制器用于LCD扩大显示功能。该装置的显示部分512模式(64x8)。它也支持串行接口,蜂鸣器响,看门狗定时器和时基定时器功能。HT1625是一个内存映射和多功能的LCD控制器。的VK1625软件配置特征使它适合于多种LCD应用包括液晶显示模块和显示子系统。只用三条线是主机控制器和VK1625之间的接口要求。有QFP100封装,LQFP100封装。 QQ:1918885898 VK1625 产品特征 ★:工作电压:2.7V ~ 5.2V ★:内置的RC振荡器 ★:外部的32.768kHz晶体和32kHz频率源的输入 ★:1 / 4偏压,1 / 8的duty,帧频为64Hz ★:64x8显示模式8X64段 ★:内置的内部电阻式偏置发生器 ★:三条线串行接口 ★:8种时基/ WDT的选择 ★:时基或WDT溢出输出 ★:液晶显示内存的R / W地址自动递增 ★:两个可选蜂鸣器的频率(2/3) ★:关机命令降低功耗 ★:软件配置特征 ★:数据模式和命令模式指令 ★:三条数据访问模式 ★:提供 VLCD引脚来调整 LCD 工作电压 ★:规格介绍 100引脚 LQFP封装 VK1625 LQFP100 100引脚 QFP封装VK1625 QFP100
标签: 1625 LCD VK HT 液晶 显示驱动 程序设计
上传时间: 2018-07-10
上传用户:szqxw1688
深圳永嘉微电 超高性价比水位检测芯片推出 *水位检测芯片可用于需要检测水位,缺水,溢出等场合。适合应用于饮水机、净饮机、咖啡机、水壶、洗碗机、制冰机等水相关家用电器和电子产品。 测试环境:在一个玻璃容器外壁(玻璃1-5毫米不等),通过双面电子导热硅胶,把水位检测PCB直接贴在玻璃上面检测水位。1-8点高灵敏度电容式水位检测专用触控IC-VK36W系列 水位检测 背景技术: 目前的检水方式主要有探针检水、水位传感器检水(光电式水位传感器,超声波水位传感器)和干簧管检水等方式,但这些方式的应用成本高,并且其安装时需要用到很长的连接线路,为了配合长的连接线路,容易使得产品的结构受到限制,并且拆装复杂,价格昴贵,不利于产品的推广及普及广泛应用。 技术实现要素: 为解决上述问题,本实用新型的目的在于提供一种触摸感应检水电路,能够准确检测是否有水,并且能够降低电路的成本几个等级,简化检水的结构,使得拆装便利,有利于产品的生产。 VK36WXX系列(最多支持9个检测点) 是一款用于一段液位检测的专用集成电路。基于电容感应的检测原理,集成我们公司花费多年研究的独特算法,能够做到智能识别,无论是有液体上电,还是无液体上电,都能正确指示液位状态。本产品既可适用于直接接触液体的检测装置,也可适用于不直接接触液体的检测装置。尤其是非接触式的检测更安全更方便、更有优势,也可防腐蚀、防污染 1.液体检测器 2.触摸开关 3.加温器 4.喷雾器 5 水池、水箱、水缸、液体皿 联系人:许先生 联系手机:188 9858 2398 (微信) 联系QQ:191 888 5898 E-mail:zes1688@163.com
标签: 16 36W SOP QFN VK 36 8I W8 水位检测 感应电容
上传时间: 2019-08-28
上传用户:szqxw1688