//温度数码管显示演示程序 //数码管位选信号 :由右到左为P20、P21、P22、P23、P24、P33 //数码管数据线 :P0口 //数码管数字码 :0 0xC0 1 0xF9 2 0xA4 3 0xB0 4 0x99 5 0x92 6 0x82 7 0xF8 8 0x80 9 0x90 //数码管带点码 :0 0x40 1 0x79 2 0x24 3 0x30 4 0x19 5 0x12 6 0x02 7 0x78 8 0x00 9 0x10 //18B20端口DQ :P27
上传时间: 2014-01-22
上传用户:古谷仁美
电路连接 由于数码管品种多样,还有共阴共阳的,下面我们使用一个数码管段码生成器(在文章结尾) 去解决不同数码管的问题: 本例作者利用手头现有的一位不知品牌的共阳数码管:型号D5611 A/B,在Eagle 找了一个 类似的型号SA56-11,引脚功能一样可以直接代换。所以下面电路图使用SA56-11 做引脚说明。 注意: 1. 将数码管的a~g 段,分别接到Arduino 的D0~D6 上面。如果你手上的数码管未知的话,可以通过通电测量它哪个引脚对应哪个字段,然后找出a~g 即可。 2. 分清共阴还是共阳。共阴的话,接220Ω电阻到电源负极;共阳的话,接220Ω电阻到电源+5v。 3. 220Ω电阻视数码管实际工作亮度与手头现有原件而定,不一定需要准确。 4. 按下按钮即停。 源代码 由于我是按照段码生成器默认接法接的,所以不用修改段码生成器了,直接在段码生成器选择共阳极,再按“自动”生成数组就搞定。 下面是源代码,由于偷懒不用写循环,使用了部分AVR 语句。 PORTD 这个是AVR 的端口输出控制语句,8 位对应D7~D0,PORTD=00001001 就是D3 和D0 是高电平。 PORTD = a;就是找出相应的段码输出到D7~D0。 DDRD 这个是AVR 语句中控制引脚作为输出/输入的语句。DDRD = 0xFF;就是D0~D7 全部 作为输出脚了。 ARDUINO CODECOPY /* Arduino 单数码管骰子 Ansifa 2011-12-28 */ //定义段码表,表中十个元素由LED 段码生成器生成,选择了共阳极。 inta[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; voidsetup() { DDRD = 0xFF; //AVR 定义PortD 的低七位全部用作输出使用。即0xFF=B11111111对 应D7~D0 pinMode(12, INPUT); //D12用来做骰子暂停的开关 } voidloop() { for(int i = 0; i < 10; i++) { //将段码输出PortD 的低7位,即Arduino 的引脚D0~D6,这样需要取出PORTD 最高位,即 D7的状态,与段码相加,之后再输出。 PORTD = a[i]; delay(50); //延时50ms while(digitalRead(12)) {} //如果D12引脚高电平,则在此死循环,暂停LED 跑 动 } }
上传时间: 2013-10-15
上传用户:baitouyu
附件为:LCD12864显示汉字和数字的程序与电路 /* 自定义延时子函数 */ void delayms(uchar z) { int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /* 判断LCD忙信号状态 */ void buys() { int dat; RW=1; RS=0; do { P0=0x00; E=1; dat=P0; E=0; dat=0x80 & dat; } while(!(dat==0x00)); } /* LCD写指令函数 */ void w_com(uchar com) { //buys(); RW=0; RS=0; E=1; P0=com; E=0; } /* LCD写数据函数 */ void w_date(uchar date) { //buys(); RW=0; RS=1; E=1; P0=date; E=0; } /* LCD选屏函数 */ void select_screen(uchar screen) { switch(screen) { case 0: //选择全屏 CS1=0; CS2=0; break; case 1: //选择左屏 CS1=0; CS2=1; break; case 2: //选择右屏 CS1=1; CS2=0; break; /* case 3: //选择右屏 CS1=1; CS2=1; break; */ } } /* LCDx向上滚屏显示 */ void lcd_rol() { int x; for(x=0;x<64;x++) { select_screen(0); w_com(0xC0+x); delayms(500); } } /* LCD清屏函数:清屏从第一页的第一列开始,总共8页,64列 */ void clear_screen(screen) { int x,y; select_screen(screen); //screen:0-选择全屏,1-选择左半屏,2-选择右半屏 for(x=0xb8;x<0xC0;x++) //从0xb8-0xbf,共8页 { w_com(x); w_com(0x40); //列的初始地址是0x40 for(y=0;y<64;y++) { w_date(0x00); } } } /* LCD显示汉字字库函数 */ void lcd_display_hanzi(uchar screen,uchar page,uchar col,uint mun) { //screen:选择屏幕参数,page:选择页参数0-3,col:选择列参数0-3,mun:显示第几个汉字的参数 int a; mun=mun*32; select_screen(screen); w_com(0xb8+(page*2)); w_com(0x40+(col*16)); for ( a=0;a<16;a++) { w_date(hanzi[mun++]); } w_com(0xb8+(page*2)+1); w_com(0x40+(col*16)); for ( a=0;a<16;a++) { w_date(hanzi[mun++]); } } /* LCD显示字符字库函数 */ void lcd_display_zifuk(uchar screen,uchar page,uchar col,uchar mun) { //screen:选择屏幕参数,page:选择页参数0-3,col:选择列参数0-7,mun:显示第几个汉字的参数 int a; mun=mun*16; select_screen(screen); w_com(0xb8+(page*2)); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(zifu[mun++]); } w_com(0xb8+(page*2)+1); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(zifu[mun++]); } } /* LCD显示数字字库函数 */ void lcd_display_shuzi(uchar screen,uchar page,uchar col,uchar mun) { //screen:选择屏幕参数,page:选择页参数0-3,col:选择列参数0-7,mun:显示第几个汉字的参数 int a; mun=mun*16; select_screen(screen); w_com(0xb8+(page*2)); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(shuzi[mun++]); } w_com(0xb8+(page*2)+1); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(shuzi[mun++]); } } /* LCD初始化函数 */ void lcd_init() { w_com(0x3f); //LCD开显示 w_com(0xC0); //LCD行初始地址,共64行 w_com(0xb8); //LCD页初始地址,共8页 w_com(0x40); //LCD列初始地址,共64列 } /* LCD显示主函数 */ void main() { //第一行 int x; lcd_init(); //LCD初始化 clear_screen(0); //LCD清屏幕 lcd_display_shuzi(1,0,4,5); //LCD显示数字 lcd_display_shuzi(1,0,5,1); //LCD显示数字 lcd_display_hanzi(1,0,3,0); //LCD显示汉字 lcd_display_hanzi(2,0,0,1); //LCD显示汉字 //LCD字符汉字 lcd_display_hanzi(2,0,1,2); //LCD显示汉字 //第二行 lcd_display_zifuk(1,1,2,0); //LCD显示字符 lcd_display_zifuk(1,1,3,0); //LCD显示字符 lcd_display_zifuk(1,1,4,0); //LCD显示字符 lcd_display_zifuk(1,1,5,4); //LCD显示字符 lcd_display_shuzi(1,1,6,8); //LCD显示字符 lcd_display_shuzi(1,1,7,9); //LCD显示字符 lcd_display_shuzi(2,1,0,5); //LCD显示字符 lcd_display_shuzi(2,1,1,1); //LCD显示字符 lcd_display_zifuk(2,1,2,4); lcd_display_zifuk(2,1,3,1); lcd_display_zifuk(2,1,4,2); lcd_display_zifuk(2,1,5,3); //第三行 for(x=0;x<4;x++) { lcd_display_hanzi(1,2,x,3+x); //LCD显示汉字 } for(x=0;x<4;x++) { lcd_display_hanzi(2,2,x,7+x); //LCD显示汉字 } //第四行 for(x=0;x<4;x++) { lcd_display_zifuk(1,3,x,5+x); //LCD显示汉字 } lcd_display_shuzi(1,3,4,7); lcd_display_shuzi(1,3,5,5); lcd_display_shuzi(1,3,6,5); lcd_display_zifuk(1,3,7,9); lcd_display_shuzi(2,3,0,8); lcd_display_shuzi(2,3,1,9); lcd_display_shuzi(2,3,2,9); lcd_display_shuzi(2,3,3,5); lcd_display_shuzi(2,3,4,6); lcd_display_shuzi(2,3,5,8); lcd_display_shuzi(2,3,6,9); lcd_display_shuzi(2,3,7,2); while(1); /* while(1) { // LCD向上滚屏显示 lcd_rol(); } */ }
上传时间: 2013-11-08
上传用户:aeiouetla
#include<iom16v.h> #include<macros.h> #define uint unsigned int #define uchar unsigned char uint a,b,c,d=0; void delay(c) { for for(a=0;a<c;a++) for(b=0;b<12;b++); }; uchar tab[]={ 0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
上传时间: 2013-10-21
上传用户:13788529953
BIT_SELFREFRESH EQU (1<<22) ;定义SDRAM自刷新标志位 16 17 ;Pre-defined constants 预定义6种工作模式 18 USERMODE EQU 0x10 ;用户模式 19 FIQMODE EQU 0x11 ;快速中断模式 20 IRQMODE EQU 0x12 ;中断模式 21 SVCMODE EQU 0x13 ;监管模式 22 ABORTMODE EQU 0x17 ;异常中断模式 23 UNDEFMODE EQU 0x1b ;未定义模式 24 25 MODEMASK EQU 0x1f ;模式掩码 26 NOINT EQU 0xC0 ;取消中断 27 28 ;The location of stacks;设置6种工作模式的堆栈的起始地址 29 ;在option.inc中定义了_STACK_BASEADDRESS EQU 0x33ff8000 30 UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~ 31 SVCStack EQU (_STACK_BASEADDRESS-0x2800) ;0x33ff5800 ~ 32 UndefStack EQU (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00 ~ 33 AbortStack EQU (_STACK_BASEADDRESS-0x2000) ;0x33ff6000 ~ 34 IRQStack EQU (_STACK_BASEADDRESS-0x1000) ;0x33ff7000 ~ 35 FIQStack EQU (_STACK_BASEADDRESS-0x0) ;0x33ff8000 ~
上传时间: 2013-10-07
上传用户:m62383408
AT89C2051驱动步进电机的电路和源码:AT89C2051驱动步进电机的电路和源码 程序:stepper.c stepper.hex/* * STEPPER.C * sweeping stepper's rotor cw and cww 400 steps * Copyright (c) 1999 by W.Sirichote */#i nclude c:\mc5151io.h /* include i/o header file */ #i nclude c:\mc5151reg.hregister unsigned char j,flag1,temp; register unsigned int cw_n,ccw_n;unsigned char step[8]={0x80,0xC0,0x40,0x60,0x20,0x30,0x10,0x90} #define n 400/* flag1 mask byte 0x01 run cw() 0x02 run ccw() */main(){ flag1=0; serinit(9600); disable(); /* no need timer interrupt */ cw_n = n; /* initial step number for cw */ flag1 |=0x01; /* initial enable cw() */while(1){ { tick_wait(); /* wait for 10ms elapsed */energize(); /* round-robin execution the following tasks every 10ms */ cw(); ccw(); } }}cw(){ if((flag1&0x01)!=0) { cw_n--; /* decrement cw step number */ if (cw_n !=0) j++; /* if not zero increment index j */ else {flag1&=~0x01; /* disable cw() execution */ ccw_n = n; /* reload step number to ccw counter */ flag1 |=0x02; /* enable cww() execution */ } }
上传时间: 2013-11-21
上传用户:boyaboy
51单片机驱动步进电机(含电路图和源程序代码) 源程序:stepper.c stepper.hex /* * STEPPER.C * sweeping stepper's rotor cw and cww 400 steps * Copyright (c) 1999 by W.Sirichote */ #i nclude c:\mc5151io.h /* include i/o header file */ #i nclude c:\mc5151reg.h register unsigned char j,flag1,temp; register unsigned int cw_n,ccw_n; unsigned char step[8]={0x80,0xC0,0x40,0x60,0x20,0x30,0x10,0x90} #define n 400 /* flag1 mask byte 0x01 run cw() 0x02 run ccw() */
上传时间: 2013-11-09
上传用户:钓鳌牧马
include "macrodefine.h"#include "lpc2294.h" //ADS1210初始化子程序void AD_Init(void){ Delayus(2); SPI1_Communation(0x64); SPI1_Communation(0x72); //单极性,SDOUT独立,先MSB,REF使用内部 SPI1_Communation(0x20); //自校准模式,增益1,通道0 SPI1_Communation(0x87); //TURBO=16, SPI1_Communation(0xa0); //数据更新率100}//读取ADS1210转换结果子程序uint32 Read_AD_Data(void){ uint8 i=0; uint8 Data_Temp[3]; uint32 Result_HEX=0; Delayus(1); SPI1_Communation(0xC0); for(i=0;i<3;i++) { Data_Temp[i] =SPI1_Communation(0xff); }
上传时间: 2013-10-10
上传用户:suicone
P89V51RD2具有一个可编程的看门狗定时器(WDT),可用于系统故障安全保护,防止软件死锁和自动恢复。WDT在CPU落入软件运行失控的情况下可作为一种恢复的方法。P89V51RD2有两个特殊功能寄存器WDTC(地址0xC0)和WDTD(地址0x85)用于看门狗功能,有关这两个寄存器的详细注解参见
上传时间: 2016-06-12
上传用户:huql11633
#include<reg52.h> #include<intrins.h> #define LED P0 sbit KEY0=P2^0; //定义按键输入端口 A sbit KEY1=P2^1; //定义按键输入端口 B sbit KEY2=P2^2; //定义按键输入端口 C unsigned int Led_table[8]={0xfe,0xfc,0xf8,0xf0,0xe0,0xC0,0x80,0x00}; char Led_num=0; unsigned int num=0; //中断计数 void delayms(unsigned int x) { unsigned int i,j;
标签: 单片机
上传时间: 2015-12-23
上传用户:kimyu