实验一:要求:利用动态扫描和定时器1在数码管上显示出从7432开始以1/10秒的速度往下递减直至7398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“ABCD”。到此保持住。
程序:
//数码动态显示
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0x28,0xeb,0x32,0xa2,
0xe1,0xa4,0x04,0xea,
0x00,0x80,0x60,0x25,
0x3c,0x23,0x34,0x74};
uchar temp,t0,t1,bai,shi,ge,flag,flag1;
uint shu;
void init();
void display(uchar,uchar,uchar,uchar);
//延时函数
void delay(uint z)
{
uint t1,y;
for(t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}
//主函数
void main()
{
init();
while(1)
{
if(flag1!=1)
display(7,bai,shi,ge);
else
display(10,11,12,13); //显示A,B,C,D
}
}
//系统初始化
void init()
{
shu=432; //开始数目是432
temp=0xfe;
P1=temp; //数目给位地址
TMOD=0x11; //设置定时器0和1的工作方式
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器中断0
ET1=1; //开定时器中断1
TR0=1; //启动定时器中断0
TR1=1; //启动定时器中断1
}
//中断0,工作在模式1,控制LED灯
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
if(flag!=1)
{
if(t0==10)
{
t0=1;
temp=_crol_(temp,1); //循环右移动,控制灯的闪烁
P1=temp;
}
}
else
{
if(t0%4==0) //灯全亮和灭控制
P1=~P1;
if(t0==60) //灯全灭
{
TR0=0;
P1=0xff;
flag1=1;
}
}
}
//中断1,工作是模式3,控制数码管
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t1++;
if(t1==2)
{
t1=0;
shu--; //数自减
bai=shu/100;
shi=shu%100/10;
ge=shu%10;
if(shu==398)
{
TR0=0; //关中断0
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1; //开打中断0
flag=1; //标志位为1
t0=0;
P1=0xff;
TR1=0; //关中断1
}
}
}
//显示函数
void display(uchar aa,uchar ba,uchar sh,uchar g)
{
P0=table[aa]; //位选
P2=0x7f; //段选
delay(5);
P0=table[ba];
P2=0xbf;
delay(5);
P0=table[sh];
P2=0xdf;
delay(5);
P0=table[g];
P2=0xef;
delay(5);
}
关键字:C51入门 动态数码管 显示实验
引用地址:
C51入门5,动态数码管显示实验
推荐阅读最新更新时间:2024-03-16 15:18
51单片机数码管的动态显示
/******************************************* * 本节实验,需要加深理解锁存器,位选线, * 段选线等,以及防止重影的方法;和keil中数 * 组的定义; *另外想让8个数码管同时显示不同的数字, *靠的是程序的快速运行,和人眼的短时间缓冲原理实现的 *本例的延时设定是1ms,可以分别用100ms *等尝试一下 ******************************************/ #include reg52.h #define uchar unsigned char #define uint unsigned int
[单片机]
单片机实验----控制数码管的动态显示
本次实验任务如下: 一、动态显示与静态显示的比较 1.什么是动态显示 驱动电路可以使数码管正常显示数据,数码管的驱动方式有两种:动态显示驱动和静态显示驱动。 动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起。 另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。 当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制。 2.什么是静态显示 静态显示驱动静态驱动也称直流驱动。 静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动。 3.优缺点对比 二、
[单片机]
STM32f4---TFTLCD显示实验代码(05)
//不同的 LCD驱动器不同的初始化设置 if(lcddev.id 0XFF||lcddev.id==0XFFFF||lcddev.id==0X9300) //ID 不正确,新增 0X9300判断,因为9341 在未被复位的情况下会被读成9300 { //尝试9341 ID 的读取 LCD_WR_REG(0XD3); lcddev.id=LCD_RD_DATA(); //dummy read lcddev.id=LCD_RD_DATA(); //读到 0X00 lcddev.id=LCD_RD_DATA(); //读取 93 lcddev.id
[单片机]
用51单片机显示动态数码管
#include reg51.h //头文件 sbit SMGA=P2^2;//位定义 sbit SMGB=P2^3; sbit SMGC=P2^4; unsigned int table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f ,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管字形码 void delay()//延时函数 { unsigned char a,b; for(a=0;a 20;a++) for(b=0;b 20;b++); } void xshs() //数码管驱动函数 {
[单片机]
单片机学习笔记 —— 8位数码管动态扫描
我们知道,依次只能让一个数码管/led灯亮起来,但是我们可以通过高频动态扫描得到8位数码管同时亮起来,这里介绍如何实现。 一、八位数码管 1、八位数码管原理图 下图为原理图: 段选信号:P0 位选信号:P2 译码使能:P2.3非 (图中已用蓝色框圈出) 2、控制信号 段选信号:一位数码管包含8个二极管,a-g,如图: 8个二极管共阴极,以位选信号作为使能信号 位选信号:位选信号为SEL P2 ,如果位选信号为101,结果译码器译码得到0001 0000(单热点编码方式),选择第五位数码管 显示数字:在位选有效时,通过设置段选信号来设置数值,如段选为P0=10111110时,ABCDEFG对应为10111
[单片机]
51单片机38译码器实现动态数码管控制
51单片机38译码器实现动态数码管控制 代码如下: #include REGX51.H void delay(void) //延时函数 { unsigned char i, j; for (i=0;i 10;i++) { for(j=0;j 10;j++); } } void main(void) { //译码后的选位数组 unsigned char yimaweima ={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7}; //段码数组 unsigned char duanma ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7
[单片机]
51单片机学习笔记2.动态数码管的使用
原理图 内容 74HC138译码器 数码管 公共端 - 位选线 连在一起的段线 - 段选线 通过控制在不同位选线 不同的段选线通电(段选数据不同)以达到在不同位置显示不同数字的目的 具体看单片机原理图即可 动态显示其实一个时刻只点亮一个数字,在24ms内点亮下一个就会看成是同时亮的 代码 首先是一段转码用的 u8 code smgduan ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//最高位为小数点,如果需要点亮小数点只需 | (0x80)或是 | 128 然后是显示用的函数
[单片机]
传谷歌实验室开发显示屏无缝拼接技术
谷歌秘密实验室Google X正在开发一个项目,内容是将较小的显示屏无缝拼接成一个大显示屏 新浪科技讯 北京时间10月4日凌晨消息,据高科技新闻资讯网站Sslashgear报道,谷歌(575.28, 5.20, 0.91%)秘密实验室Google X正在开发一个项目,内容是将较小的显示屏无缝拼接成一个大显示屏。 据悉,这个项目旨在将各种自由形状的小显示屏无缝拼接成一个大显示屏,并可为后者任选方形、圆形或任何其他形状。另据消息人士透露,拼接而成的大显示屏的尺寸也可任选。 报道称,该项目的目标是实现无缝成像,这是研究人员目前致力于解决的挑战性难题。这个Google X项目由前麻省理工学院教授玛丽·洛·杰普森(
[手机便携]