AVRmega16 LED 例程
#include<mega16.h>
#include<delay.h>
void main(void)
{
DDRA=0xff;
while(1)
{
PORTA=0x01;
};
}
#include<mega16.h>
#include<delay.h>
void main(void)
{
unsignedchar i;
PORTA=0x00;
DDRA=0xFF;
while(1)
{
for(i=0;i<8;i++)
{
PORTA=1<<i ;
delay_ms(200);
}
}
}
或者(运用if语句,用位移 << 操作实现)
#include<mega16.h>
#include<delay.h>
void main(void)
{
unsignedchar a;
PORTA=0x00;
DDRA=0xFF;
a=0b00000001;
while(1)
{
if(a==0b00000000)
a=0b00000001;
PORTA=a;
a=a<<1;
delay_ms(200);
}
}
或者用一维数组
#include<mega161.h>
#include<delay.h>
void main()
{
unsignedchar display1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsignedchar display2[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsignedchar k,b;
DDRA=0xff;
while(1)
{
for(k=0;k<8;k++)
{
PORTA=display1[k];
delay_ms(150);
}
for(b=0;b<8;b++)
{
PORTA=display2[b];
delay_ms(150);
}
}
}
例程3:用独立按键控制一个灯(运用if与else语句)
#include<mega16.h>
#include<delay.h>
void main(void)
{
DDRA=0xff;
DDRB=0x00;
PORTB=0xff;
while(1)
{
if(PINB.0==0)
{
PORTA=0x01;
//delay_ms(1000);
}
else
{
PORTA=0x00;
// delay_ms(1000);
}
};
}
#include<mega16.h>
#include<delay.h>
void main(void)
{
DDRA=0xff;
DDRB=0x00;
while(1)
{
switch(PINB)
{
case(0xfe):
PORTA=0x01;break;
case(0xfd):
PORTA=0x02;break;
case(0xfb):
PORTA=0x04;break;
case(0xf7):
PORTA=0x08;break;
case(0xef):
PORTA=0x10;break;
case(0xdf):
PORTA=0x20;break;
case(0xbf):
PORTA=0x40;break;
case(0x7f):
PORTA=0x80;break;
}
};
}
1位8段数码管
#include<mega16.h>
#include<delay.h>
void main(void)
{
//unsigned char display[16]={0x3F, 0x06, 0x5B, 0x4F,0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F,0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; //共阴极
unsignedchar display[16]={0xc0,0xf9,0xA4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极
unsignedchar i =0;
PORTA=0x00;
DDRA=0xff;
while(1)
{
PORTA= display[i];
i++;
if(i ==16)
i =0;
delay_ms(1000);
//PORTA= ~display[i] ; //共阴极 (取反)
PORTA= display[i];//共阳极
};
}
#include<mega16.h>
#include<delay.h>
void main(void)
{
// unsigned char i;
PORTA=0x00;//段选初始化
PORTB=0x00;
DDRA=0xff;//段
DDRB=0xff;//位
while(1)
{
PORTB=0x00;
PORTA=0x06;//1
PORTB=0xfe;
delay_ms(1);
PORTB=0x00;
PORTA=0x66;//4
PORTB=0xfd;
delay_ms(1);
PORTB=0x00;
PORTA=0x3f;//0
PORTB=0xfb;
delay_ms(1);
PORTB=0x00;
PORTA=0x06;//1
PORTB=0xf7;
delay_ms(1);
PORTB=0x00;
PORTA=0x3f;//0
PORTB=0xef;
delay_ms(1);
PORTB=0x00;
PORTA=0x7d;//6
PORTB=0xdf;
delay_ms(1);
PORTB=0x00;
PORTA=0x66;//4
PORTB=0xbf;
delay_ms(1);
PORTB=0x00;
PORTA=0x07;//7
PORTB=0x7f;
delay_ms(1);
};
}
#include<mega16.h>
#include<delay.h>
#defineuintunsignedint
#define uchar unsignedchar
uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shi,fen,miao;
uint time;//注意char 与int的取值?
void display(uchar shi,uchar fen,uchar miao)
{
PORTB=0Xfe;//位码
PORTA=(duan[shi/10]);//段码
delay_ms(2);
PORTB=0xfd;
PORTA=(duan[shi%10]);
delay_ms(2);
PORTB=0xfb;//位码
PORTA=0x40;//段码
delay_ms(2);
PORTB=0xf7;//位码
PORTA=(duan[fen/10]);//段码
delay_ms(2);
PORTB=0xef;
PORTA=(duan[fen%10]);
delay_ms(2);
PORTB=0xdf;//位码
PORTA=0x40;//段码
delay_ms(2);
PORTB=0xbf;//位码
PORTA=(duan[miao/10]);//段码
delay_ms(2);
PORTB=0x7f;
PORTA=(duan[miao%10]);
delay_ms(2);
}
void init()//程序初始化
{
TCCR0=0x02;
TCNT0=0x06;
TIMSK=0x01;
ACSR=0x80;
#asm("sei")
PORTA=0x00;
PORTB=0x00;
DDRA=0xff;
DDRB=0xff;
time=0;
}
interrupt [TIM0_OVF]void timer0_ovf_isr(void) /*打开定时器0 */
{
TCNT0=0x06;//设置初值 (0-ff之间)
time++;
if(time==400)//计算,结合初值算出精确时间
{
miao++;
if(miao>59)
{
miao=0;
fen++;
};
if(fen>59)
{
fen=0;
shi++;
};
if(shi>23)
shi=0;
time=0;//归零
}
}
void main()
{
init();
while(1)
{
display(shi,fen,miao);
}
}
#include<mega16.h>
#include<delay.h>
unsignedchar display[16]={0xc0,0xf9,0xA4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极
unsignedchar temp;
void main(void)
{
DDRA=0xff;
DDRB=0x00;
while(1)
{
temp=PINB;//将值给tem
switch(PINB)
{
case(0xfe):
PORTA=display[0];break;
case(0xfd):
PORTA=display[1];break;
case(0xfb):
PORTA=display[2];break;
case(0xf7):
PORTA=display[3];break;
case(0xef):
PORTA=display[4];break;
case(0xdf):
PORTA=display[5];break;
case(0xbf):
PORTA=display[6];break;
case(0x7f):
PORTA=display[7];break;
}
};
}
例程:矩阵键盘与数码管显示数值
#include<mega16.h>
#include<delay.h>
//#define uchar unsigned char
//#define uint unsigned int
unsignedchar display[16]={0xc0,0xf9,0xA4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极
unsignedchar yin,temp;
void init()
{
PORTA=0x00;
DDRA=0Xff;
DDRB=0x00;
PORTB=0x00;
}
void keyscan()
{
for(yin=0;yin<2;yin++)
{
PORTB=0xfe;//将第一行置0,即检测第一行
temp=PIND;//将值给tem
temp=temp&0xf0;//与0xf0与门一下,
while(temp!=0xf0)//判断是否为0xf0
{
delay_ms(10);//延时
temp=PINB;//将P1值再给tem
temp=temp&0xf0;//将值再与门
while(temp!=0xf0)//再次判断是否为0xf0
{
temp=PINB;//确实按下了,将tem值装回,以便下次判断开关语句,否则没有它对应的值,如原来是ee,如果再按下是第二个键就不是de了
switch(temp)
{
case0xee:
PORTA=display[0];break;
case0xde:
PORTA=display[1];break;
case0xbe:
PORTA=display[2];break;
case0x7e:
PORTA=display[3];break;
}
while(temp!=0xf0)//松手判断,以便退出以上两个while
{
temp=PINB;//给temp赋值
temp=temp&0xf0;//与门一下
}
}
}
}
for(yin=0;yin<2;yin++)
{
PORTB=0xfd;//将第2行置0,即检测第2行?
temp=PIND;//将值给tem
temp=temp&0xf0;//与0xf0与门一下,
while(temp!=0xf0)//判断是否为0xf0
{
delay_ms(10);//延时
temp=PINB;//将P1值再给tem
temp=temp&0xf0;//将值再与门
while(temp!=0xf0)//再次判断是否为0xf0
{
temp=PINB;//确实按下了,将tem值装回,以便下次判断开关语句,否则没有它对应的值,如原来是ee,如果再按下是第二个键就不是de了
switch(temp)
{
case0xed:
PORTA=display[4];break;
case0xdd:
PORTA=display[5];break;
case0xbd:
PORTA=display[6];break;
case0x7d:
PORTA=display[7];break;
}
while(temp!=0xf0)//松手判断,以便退出以上两个while
{
temp=PINB;//给temp赋值
temp=temp&0xf0;//与门一下
}
}
}
}
for(yin=0;yin<2;yin++)
{
PORTB=0xfb;//将第3行置0,即检测第3
temp=PIND;//将值给tem
temp=temp&0xf0;//与0xf0与门一下,
while(temp!=0xf0)//判断是否为0xf0
{
delay_ms(10);//延时
temp=PINB;//将P1值再给tem
temp=temp&0xf0;//将值再与门
while(temp!=0xf0)//再次判断是否为0xf0
{
temp=PINB;//确实按下了,将tem值装回,以便下次判断开关语句,否则没有它对应的值,如原来是ee,如果再按下是第二个键就不是de了
switch(temp)
{
case0xeb:
PORTA=display[8];break;
case0xdb:
PORTA=display[9];break;
case0xbb:
PORTA=display[10];break;
case0x7b:
PORTA=display[11];break;
}
while(temp!=0xf0)//松手判断,以便退出以上两个while
{
temp=PINB;//给temp赋值
temp=temp&0xf0;//与门一下
}
}
}
}
for(yin=0;yin<2;yin++)
{
PORTB=0xf7;//将第4兄?,即检测第4行
temp=PIND;//将值给tem
temp=temp&0xf0;//与0xf0与门一下,
while(temp!=0xf0)//判断是否为0xf0
{
delay_ms(10);//延时
temp=PINB;//将P1值再给tem
temp=temp&0xf0;//将值再与门
while(temp!=0xf0)//再次判断是否为0xf0
{
temp=PINB;//确实按下了,将tem值装回,以便下次判断开关语句,否则没有它对应的值,如原来是ee,如果再按下是第二个键就不是de了
switch(temp)
{
case0xe7:
PORTA=display[12];break;
case0xd7:
PORTA=display[13];break;
case0xb7:
PORTA=display[14];break;
case0x77:
PORTA=display[15];break;
}
while(temp!=0xf0)//松手判断,以便退出以上两个while
{
temp=PINB;//给temp赋值
temp=temp&0xf0;//与门一下
}
}
}
}
}
void main()
{
init();
PORTB=0xff;//PB输出为高电位
DDRB=0x0f;//设置高
while(1)
{
keyscan();
}
}
#include<lcd.h>
#include<delay.h>
#asm
.equ __lcd_port =0x18
#endasm
int sec =50,min=59,hour=23;
void display_time(void){
lcd_gotoxy(0,0);
lcd_putchar('0'+hour/10);
lcd_putchar('0'+hour%10);
lcd_putchar(':');
lcd_putchar('0'+min/10);
lcd_putchar('0'+min%10);
lcd_putchar(':');
lcd_putchar('0'+sec/10);
lcd_putchar('0'+sec%10);
}
void time_tick(void){
sec++;
if(sec ==60){
sec =0;
min++;
if(min ==60){
min =0;
hour++;
if(hour ==24){
hour =0;
}
}
}
}
void main(void){
lcd_init(16);
while(1){
time_tick();
display_time();
delay_ms(1000);
}
}
#include<mega16.h>
#include<delay.h>
#define uchar unsignedchar
uchar a;
#define key_up PINA.5
#define key_dowm PINA.6
interrupt [EXT_INT0]void INT0_mode(void)//中断选择电机正反转
{ TCCR1A=0x00;// PD4,PD5都不产生PWM
PORTD=0x00;//初始化PD4,PD5电平相等
a++;
delay_ms(10);
if(a>1)
a=0;
}
void main(void)
{
DDRA.4=0;
DDRA.5=0;
PORTA=0xf0;
DDRD=0xf0;//PD4,5做输出
GICR=0x40;//外部中断0
MCUCR=0x00;//低电平触发INT0
MCUCSR=0x00;
GIFR=0x40;
TCCR1B=0x19;//工作模式14 快速PWM
TCNT1H=0x00;//计数器从0开始
TCNT1L=0x00;
ICR1H=5000/256;//计数上限植高8位
ICR1L=5000%256;// 计数上限植低8位
#asm("sei")
while(1)
{
if(a==0)
{
if(key_up==0)
{ PORTD.5=0;
TCCR1A=0x22;// 只开PD4
OCR1B=1500;//比较数值(快速)
}
if(key_dowm==0)
{ PORTD.5=0;
TCCR1A=0x22;// 只开PD4
OCR1B=3000;//慢速
}
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
AVRmega16 LED 例程的更多相关文章
- 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源 ...
- 【资料下载区】【iCore3相关代码、资料下载地址】更新日期2017/1/5
[iCore3 ARM代码下载地址][全部]DEMO1.0测试程序发布例程一:ARM驱动三色LED例程二:读取arm按键状态例程三:EXTI中断输入实验——读取ARM按键状态例程四:USART通信实验 ...
- [异常] JLink Error: Could not find supported CPU core on JTAG chain J-Link连接不到stm32内核问题
>_<" 昨天晚上还好好的,今天早上调试的时候就不行了,下载程序的时候总是报J-Link连接不上,而且stm32似乎也死机了,led灯不闪烁,TFT屏也无显示. >_< ...
- 【资料下载区】【iCore4相关代码、资料下载地址】更新日期2018/02/24
[iCore4相关文档][更新中...] iCore4原理图(PDF)下载iCore4引脚注释(PDF)下载iCore4机械尺寸(PDF)下载 [iCore4相关例程代码][ARM] DEMO测试程序 ...
- 【资料下载区】【iCore1S相关代码、资料下载地址】更新日期2017/10/09
[iCore1S相关文档][更新中...] iCore1S原理图(PDF)下载iCore1S引脚注释(PDF)下载 [iCore1S相关例程代码][ARM][更新中...] DEMO1.0测试程序发布 ...
- 【资料下载区】【GMT43相关代码、资料下载地址】更新日期2017/06/28
[GMT43相关文档][更新中...] GMT43原理图(PDF)下载GMT43说明书(PDF)下载GMT43机械结构尺寸(PDF)下载 [GMT43相关例程代码][ARM][更新中...] 基于HA ...
- Zigbee协议栈--Z-Stack的使用
使用方法简介:一般情况下用户只需要额外添加三个文件就可以完成一个项目.一个是主文件,存放具体的任务事件处理函数:一个是这个主文件的头文件:另外一个是以Osal开头的操作系统接口文件,是专门存放任务处理 ...
- GPIO 的 8 种工作模式
GPIO 的 8 种工作模式 在初始化 GPIO 的时候,根据我们的使用要求,必须把 GPIO 设置为相应的模式.如 LED 例程中的 GPIO 引脚如果配置为模拟输入模式是必然会导致错误的. 我们配 ...
- [stm32][ucos] 1、基于ucos操作系统的LED闪烁、串口通信简单例程
* 内容简述: 本例程操作系统采用ucos2.86a版本, 建立了5个任务 任务名 优先级 ...
随机推荐
- JavaScript的原生Ajax解析
通过JavaScript的Ajax进行详细的解析过程,从而更好的了解Jquery的Ajax. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百 ...
- HGAME-week2-web-wp
hgame第二周总结 1.webpack-engine 我不懂,但是真的刚打开就出来了,一脸懵逼(wp说是sourcemap没关 hgame{D0nt_f0r9et_2_ClOs3_S0urce_m@ ...
- Solution -「AGC 036D」「AT 5147」Negative Cycle
\(\mathcal{Descriprtion}\) Link. 在一个含 \(n\) 个结点的有向图中,存在边 \(\lang i,i+1,0\rang\),它们不能被删除:还有边 \(\l ...
- Git简单介绍以及使用入门
Git Git:分布式版本控制系统, 此外还有 SVN (集中式版本控制系统) 下载地址(阿里云镜像) :CNPM Binaries Mirror (npmmirror.com) Git Bash : ...
- [LeetCode]剑指 Offer 17. 打印从1到最大的n位数
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数 999. 示例 1: 输入: n = 1 输出: [1,2,3,4,5,6,7, ...
- 快速安装与配置kubernetes集群搭
Kubernetes是什么? 首先,它是一个全新的基于容器技术的分布式架构领先方案.这个方案尽然很新,但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的一个重要成果.确切地说,kubernete ...
- 【windows 访问控制】六、安全标识符(SID Security Identifiers)
安全标识符(SID Security Identifiers) SID是用来标识安全主体.就是给安全主体一个唯一的ID.用户层面通过用户账户名识别,程序和资源之间通过SID识别. 什么是安全标识符? ...
- CultureInfo、DateTimeFormatInfo、NumberFormatinfo之间的关系
CultureInfo.DateTimeFormatInfo.NumberFormatinfo之间的关系 线程中CurrentCulture和CurrentUICulture 区别 以下是win10操 ...
- 由浅入深--第一个MyBatis程序
话不多说,马上开始我们的第一个Mybatis程序: 第一个程序,当然要参考MyBatis的官网文档来搞,地址如下:https://mybatis.org/mybatis-3/zh/getting-st ...
- VT 入门篇——最小 VT 实现(上)
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...