单片机按键扫描数码管显示C语言程序
数码管动态显示c语言程序

//这是一个,四位数码管动态显示c语言程序,每隔一秒加一,直至加到9999为止#include <reg52.h>unsigned char code LED[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; unsigned char LEDbuff[]={0xff,0xff,0xff,0xff};//定义数码管的位选段sbit SEG_bit_1 = P0^1;sbit SEG_bit_2 = P0^2;sbit SEG_bit_3 = P0^3;sbit SEG_bit_4 = P0^4;unsigned int cnt=0;unsigned int sec =0;unsigned char i=0;void main(){TMOD=0x01; /*设置定时器*/TH0=0xfc;TL0=0x18;TR0=1;EA=1; /*设置中断*/ET0=1;while(1){if(0==TF0){if(cnt>=1000){cnt=0;sec++;LEDbuff[0]=LED[sec%10]; /*设置数码管显示位*/LEDbuff[1]=LED[sec/10%10];LEDbuff[2]=LED[sec/100%10];LEDbuff[3]=LED[sec/1000%10];}}}}void interrupttimer0() interrupt 1 /*设置中断函数*/{TH0=0xfc;TL0=0x18;cnt++;P1=0xff;switch(i){case 0: SEG_bit_1 = 1;SEG_bit_4 = 0;P1=LEDbuff[0];i++;break;case 1: SEG_bit_4 = 1;SEG_bit_3 = 0;P1=LEDbuff[1];i++;break;case 2: SEG_bit_3 = 1;SEG_bit_2 = 0;P1=LEDbuff[2];i++;break;case 3: SEG_bit_2 = 1;SEG_bit_1 = 0;P1=LEDbuff[3];i=0;break;default:break;}}教你如何用WORD文档(2012-06-27 192246)转载▼标签:杂谈1. 问:WORD 里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同?答:分节,每节可以设置不同的页眉。
单片机实验 八段数码管显示 c语言 汇编

八段数码管显示汇编OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口LEDBuf equ 60h ; 显示缓冲Num equ 70h ; 显示的数据DelayT equ 75h ;ljmp StartLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay: ;mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretDisplayLED:mov r0, #LEDBufmov r1, #6 ;mov r2, #00100000b ;Loop:mov dptr, #OUTBITmov a, #0movx @dptr, a ;mov a, @r0mov dptr, #OUTSEGmovx @dptr,amov dptr, #OUTBITmov a, r2movx @dptr, a ;mov r6, #01call Delaymov a, r2 ;rr amov r2, ainc r0djnz r1, Loopmov dptr, #OUTBITmov a, #0movx @dptr, a ;retStart:mov sp, #40hmov Num, #0MLoop:mov Num, #0inc Nummov a, Nummov b, amov r0, #LEDBuf FillBuf:mov a, banl a, #0fhmov dptr, #LEDMapmovc a, @a+dptr ;mov @r0,a ;inc r0inc bcjne r0, #LEDBuf+6, FillBufmov DelayT,#0 DispAgain:call DisplayLED ;djnz DelayT,DispAgainljmp MLoopendc语言#include<reg51.h>#define LEDLen 6xdata unsigned char OUTBIT _at_ 0x8002; // 位控制口xdata unsigned char OUTSEG _at_ 0x8004; // 段控制口unsigned char LEDBuf[LEDLen]; // 显示缓冲code unsigned char LEDMAP[] = { // 八段管显示码0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d};void Delay(unsigned char CNT){ unsigned char i;while (CNT-- !=0)for (i=100; i !=0; i--);}void DisplayLED(){ unsigned char i;unsigned char Pos;unsigned char LED;Pos = 0x20; // 从左边开始显示for (i = 0; i < LEDLen; i++){ OUTBIT = 0; // 关所有八段管LED = LEDBuf[i];OUTSEG = LED;OUTBIT = Pos; // 显示一位八段管Delay(1);Pos >>= 1; // 显示下一位}OUTBIT = 0; // 关所有八段管}void main(){ unsigned char i = 0;unsigned char j;while(1){ LEDBuf[0] = LEDMAP[i%6];LEDBuf[1] = LEDMAP[(i+1)%6];LEDBuf[2] = LEDMAP[(i+2)%6];LEDBuf[3] = LEDMAP[(i+3)%6];LEDBuf[4] = LEDMAP[(i+4)%6];LEDBuf[5] = LEDMAP[(i+5)%6];i++;for(j=0; j<100; j++)DisplayLED(); // 显示}}。
基于单片机的数码管显示程序清单

#include <intrins.h>#include <reg51.h>unsigned int time=0;unsigned int timer=0;// unsigned int yanshi=0;unsigned int i=0;unsigned long S=0;sbit CS=P3^0;sbit CF=P3^1;unsigned int flag=0;unsigned char const shuzi0_9[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; //共阳极段码unsigned char const weima[4]={ 0xfb,0xef,0xbf,0x7f};//位码unsigned char disbuff[4]={1,2,3,0};void xianshi(void ) //扫描数码管{ while(1){P1=weima[i]; //取位码P2=shuzi0_9[disbuff[i]]; //取显示数据,段码{int a=0;int b=1;for(;b>0;b--)for(a=0;a<125;a++);}//扫描间隙延时,时间太长会闪烁,太短会造成重影??????????//i++;if(4==i) //检测4位扫描完全结束?如扫描完成则从第一个开始再次扫描4位{i=0; }}}void Conut(void){time=TH0*256+TL0;TH0=0;TL0=0;S=(time*0.17); //算出来是CMif((S>=7000)||flag==1) //超出测量范围显示"-"{flag=0;//flag_beep=0;disbuff[0]=10; //"-"disbuff[1]=10; //"-"disbuff[2]=10; //"-"disbuff[3]=10; //"-"//BEEP=1;}else{disbuff[0]=S/1000; //千位disbuff[1]=S/100%10;// 百位disbuff[2]=S/10%10; // 十位disbuff[3]=S%10; // 个位}}void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围{flag=1; //中断溢出标志}void zd3() interrupt 3 //T1中断用来扫描数码管和计800 ms启动模块{TH1=0xf8;TL1=0x30;//Xianshi();//DIDI();timer++;if(timer>=400){timer=0;CF=1; //800 ms 启动一次模块_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();CF=0;}}void main( void ){TMOD=0x11; //设T0为方式1,GA TE=0;TH0=0;TL0=0;TH1=0xf8; //2 MS定时TL1=0x30;ET0=1; //允许T0中断ET1=1; //允许T1中断TR1=1; //开启定时器EA=1;//开启总中断while(1){//while(!CS); //当RX为零时等待//TR0=1; //开启计数//while(CS); //当RX为1计数并等待//TR0=0; //关闭计数//Conut();//扫描数码管xianshi( );}}。
课程设计,键盘扫描显示程序(c51)

课程设计,键盘扫描显示程序(c51)
//课程设计,键盘扫描显示程序//由于开发板中使用了锁存器,在proteus 中仿真的话,加上锁存器的话,会出现乱码,并且//不成功,所以,就不贴图了,不过以下代码,在事物板上测试成功
//实验代码为实现按键扫描,并显示在数码管上
//实验班上共有4 个按键,分别接在p3.4,p3,5,p3.6.p3.7 上,因此并没有用到矩阵键盘扫描,//控制起来比较简单,6 数码管观通过锁存器接在P0 口上。
#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2;//数码管段选控制位
sbit wela=P2;//数码管位选控制位
uchar key=8;
//共阴数码管段码(不叫特殊的编码)
uchar code table[]=
{
0xed, 0x48, 0xf4, 0xb5, 0x99,
0x3d, 0x7d, 0x85, 0xfd, 0xbd,
0xdd, 0x79, 0x6c, 0xf1, 0x7c,
0x5c, 0x10, 0x00,
};
//位选编码
uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};。
单片机数码管显示程序

#include<STC12.h>#include<AD.H>#include<stdio.h>#define uchar unsigned char#define uint unsigned intuint AD_DATE;sbit LE1=P2^0; //位选573锁存器使能sbit LE2=P2^1; //段选573锁存器使能uchar code dis[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,// 0 1 2 3 4 5 6 70x7F,0x6F};// 8 9void delay(uint time) //int型数据为16位,所以最大值为65535 {uint i,j; //定义变量i,j,用于循环语句for(i=0;i<time;i++) //for循环,循环50*time次for(j=0;j<100;j++); //for循环,循环50次}void smg_show(uint n){//显示千位P0=0xef; //0xbf=1011 1111,即选通个位LE1=1; //锁存位LE1=0; //断开锁存,位选573的Q7~Q0仍保持P0=dis[n/1000]; //dis[n/10]为0~9的编码LE2=1; //锁存段码LE2=0; //断开锁存,段选573的Q7~Q0仍保持delay(10);P0=0x00;LE2=1;LE2=0; //清除P1口数据,以免造重影//显示百位P0=0xdf; //0xbf=1011 1111,即选通个位LE1=1; //锁存位LE1=0; //断开锁存,位选573的Q7~Q0仍保持P0=dis[n%1000/100]; //dis[n/10]为0~9的编码LE2=1; //锁存段码LE2=0; //断开锁存,段选573的Q7~Q0仍保持delay(10); //延时保持一下,延时过大会闪动,延时过小会有重影 P0=0x00;LE2=1;LE2=0; //清除P1口数据,以免造重影 //延时保持一下,延时过大会闪动,延时过小会有重影//显示十位P0=0xbf; //0xbf=1011 1111,即选通个位LE1=1; //锁存位LE1=0; //断开锁存,位选573的Q7~Q0仍保持P0=dis[n%100/10]; //dis[n/10]为0~9的编码LE2=1; //锁存段码LE2=0; //断开锁存,段选573的Q7~Q0仍保持delay(10); //延时保持一下,延时过大会闪动,延时过小会有重影P0=0x00;LE2=1;LE2=0; //清除P1口数据,以免造重影//显示个位P0=0x7f; //0xbf=0111 1111,即选通十分位LE1=1; //锁存位LE1=0; //断开锁存,位选573的Q7~Q0仍保持P0=dis[n%10]; //0~9的编码LE2=1; //锁存段码LE2=0; //断开锁存,段选573的Q7~Q0仍保持delay(10); //延时保持一下,延时过大会闪动,延时过小会有重影 P0=0x00;LE2=1;LE2=0; //清除P1口数据,以免造重影}main(){while(1){AD();AD_DATE=ee;smg_show(AD_DATE);}}。