linux 普通io实现pwm,用普通IO口做PWM输出 - 51单片机 - 电子工程世界-论坛 - 手机版...
本人现在想用IO口做PWM输出,频率1KHz,然后用两按键(+、-)来调节占空比0-100%,对应数码管显示000-100。
现波形是OK了,也可以调占空比,但是出现一个问题数码管显示乱七八糟,调了两天都没有调好,还请大哥们帮忙指
点。
#include
#define uint unsigned int
#define uchar unsigned char
sbit up=P2^0; //加1按键
sbit down=P2^1; //减1按键
sbit pwm_out=P1^0; //PWM输出端口
char disp=0; //显示计数器
char pwm_disp=50; //占空比显示单元,初始化为中间值
timer0_count=100;//定时中断计数器
uchar code disp_bit[]={0xbf,0xdf,0xef}; //数码管位码 P2.4,P2.5,P2.6
uchar code TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//数码管段码 0,1,2,3,4,5,6,7,8,9
void display();
//延时子函数
void delay(int x)
{
int i,j;
for(i=0;i
for(j=1;j<120;j++);
}
//T0定时器初使化
void init()
{
TMOD=0x01; //T0方式1计时
TH0=(65536-8)/256; //定时10uS
TL0=(65536-8)%256;
EA=1; //总中断开
ET0=1; //定时器0开
TR0=1; //启动定时器
}
//T0定时中断子函数
void timer0() interrupt 1 using 0
{
TH0=(65536-8)/256; //重置定时初值 10uS
TL0=(65536-8)%256;
if(pwm_disp==timer0_count )//占空比计数器等于定时中断计数器否
{
pwm_out=1; //开通输出
}
if(timer0_count==0) //定时中断计数器为0否
{
pwm_out=0; //关断输出
timer0_count=100; //重置初始值
}
timer0_count--;
}
//显示子函数
void display()
{ delay(10);
switch(disp)
{ case 0:
{
P2=0xbf; //P2为位码
P0=TABLE[pwm_disp/100]; //P0为段码
break;
}
case 1:
{
P2=0xdf;
P0=TABLE[(pwm_disp%100)/10];
break;
}
case 2:
{
P2=0xef;
P0=TABLE[pwm_disp%10];
break;
}
}
disp++;//显示计数器加1
if(disp>=3)//显示计数器等于3
disp=0; //则清零
}
//主程序
void main()
{
init();
while(1)
{
if(up==0)//增1键按下否
{ delay(10);
if(up==0)
{ pwm_disp++;
if( pwm_disp>100)
pwm_disp=0;
if(up==0);
}
}
if(down==0)//减1键按下否
{ delay(10);
if(down==0)
{ pwm_disp--;
if( pwm_disp==0)
pwm_disp=100;
if(down==0);
}
}
}
}
linux 普通io实现pwm,用普通IO口做PWM输出 - 51单片机 - 电子工程世界-论坛 - 手机版...相关推荐
- linux单片机用什么数据库,基于ARM-Linux的SQLite嵌入式数据库的研究 -单片机-电子工程世界网...
引言 随着嵌入式系统的广泛应用和用户对数据处理和管理需求的不断提高,各种智能设备和数据库技术的紧密结合已经得到了各方面的重视.不久的将来嵌入式数据库将无处不在.纵观目前国际.国内嵌入式数据库的应用情况 ...
- 51单片机扩展io口C语言编写,51单片机扩展IO口后扩展口的地址如何确定
1. 然后它说8255的A口.B口.C口.控制寄存器的地址分别为7FFCH.7FFDH.7FFEH.7FFFH.这个是怎么算出来的? 高八位7F是因为p2.7为0是选通8255的cs片选端,第八位是F ...
- linux全屏时钟应用下载,全屏时钟app下载-全屏时钟(azar Flip clock)app手机版v1.1.1-电玩之家...
全屏时钟是一款有趣的时钟软件,全屏时钟支持安卓和ios,任何手机机型均可使用.全屏时钟是款趣味时钟软件,它支持全屏时钟显示功能.全屏时钟支持动画自定义设置功能,让手机屏幕变得与众不同.感兴趣的用户们快 ...
- 学习笔记之-51单片机IO口详解
前言 对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的.51单片机每个IO端口结构都有差异,都各有各的特点.在平时的应用中,特别是设 ...
- linux 8051 编译,[编译] 3、在Linux下搭建51单片机的开发烧写环境(makefile版)
星期二, 10. 七月 2018 01:01上午 - beautifulzzzz 一.SDCC(Small Device C Compiler)编译环境搭建 SDCC是一个小型设备的C语言编译器,该编 ...
- 【51单片机】直流电机的驱动和PWM调速
51单片机驱动直流电机与 PWM 调速是通过使用 51 单片机来控制直流电机的转速和方向.51 单片机通过控制电机的电流来实现驱动,并通过生成 PWM 信号来调节电机的转速.使用 PWM 调速可以使得 ...
- Proteus基于51单片机通过PWM脉冲调制控制电机转速_按键与串口控制转速_电机转速可测
文章目录 原理图 驱动电路 MOTOR-ENCODER详解 串口通信 电机测速原理 PWM 软件部分 成果 临近期末,学校的单片机课程需要做课程设计,主要内容是基于51单片机的可调速电机,具体要求如下 ...
- 51单片机声控语音PWM风扇可自动温控定时调速风扇转速显示
实践制作DIY- GC0017-声控语音PWM风扇 一.功能说明: 基于51单片机设计-声控语音PWM风扇 功能介绍: 1.基于51(AT89C52.STC89C52)单片机,DS18B20温度传感器 ...
- Linux io模型及函数调用,Linux 网络编程的5种IO模型:信号驱动IO模型
Linux 网络编程的5种IO模型:信号驱动IO模型 背景 这一讲我们来看 信号驱动IO 模型. 介绍 情景引入: 在信号驱动IO模型中,当用户线程发起一个IO请求操作,会给对应的socket注册一个 ...
最新文章
- LintCode: Binary Tree Inorder Traversal
- 分享42个超棒的智能手机摄影画廊
- Eclipse中设置在创建新类时自动生成注释的方法
- R语言教程:生存分析
- 点关机后主机不能自动关机的原因
- python加减法计算题 代码_关于《剑指offer》中不用加减乘除做加法的Python代码的问题...
- 怎么两边同时取ln_男生“两边铲光”发型out了?试试这4款吧,剪完清爽又帅气...
- ORACLE 一些时间查询方式
- C++的冒泡排序法的原理是什么?
- 数控机床属于计算机应用领域,数控技术都应用到这些领域了!你还不知道!
- 女员工有问题,责任在于头目不管事
- java .class的作用_Java中Class类的作用与深入理解
- 0920 - 积极休息
- 生物信息学数据库分类概览
- 微信小程序ios倒计时时间不显示,安卓能正常显示,小程序倒计时兼容问题
- SpringCloud微服务---学习笔记(二)--多级缓存
- matlab 矩阵分行标准化,matlab如何将矩阵标准化 命令是什么?
- 关于PHP中如何跟踪报错的手段
- Red Hat Enterprise Linux Server 7.3 离线安装Podman
- 网页css样式滚动字幕
热门文章
- matlab提取图像中的一部分并移动,在Matlab中从图像中提取对象
- tensor转换为图片_为大家介绍图片转换pdf的经验总结!你找对方法了吗?
- 质数——python代码赏析
- java基础之设计模式
- Facebook刷新开放域问答SOTA:模型训模型!Reader当Teacher!
- 手握顶会顶刊论文,自信满满面试算法岗竟被刷?
- 聊聊Spring Cloud版本的那些事儿
- Litho在美团动态化方案MTFlexbox中的实践
- 开源开放 | Beyond 预训练语言模型,NLP还需要什么样的知识?
- 论文浅尝 | DeCLUTR: 无监督文本表示的深度对比学习