IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STC15系列单片机学习笔记——数码管与流水灯结合的案例 -> 正文阅读

[嵌入式]STC15系列单片机学习笔记——数码管与流水灯结合的案例

1.单片机外观图:
1. 单片机外观图:
2.相关原理图:
在这里插入图片描述
3.案例的目的
显示一个电话号码,并且在电话号码开头数字出现在数码管中,下方的发光二极管开始发亮,,消失即就熄灭,这样方便了解是从哪里开始。

4.源代码

#include<STC15F2K60S2.H>
#define uchar unsigned char
#define uint unsigned int
	
sbit led_sel=P2^3;//发光二极管的负极
uchar uiLed = 0xff;        //LED灯值寄存

/*---------变量定义---------*/
//位选,选择对应数码管位置
uchar weixuan[8]={0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
//段选,显示号码:13245170493 
uchar duanxuan[11] = { 0x06, 0x4f, 0x5b, 0x66, 0x6d,  0x06,0x07,0x3f,0x66,0x6f,0x4f }; 
//对应位置的段选标号
uint wei1;
uint wei2;
uint wei3;
uint wei4;
uint wei5;
uint wei6;
uint wei7;
uint wei8;
	
uint ucSeg7State;
uchar ucCount;//计中断的数量


//初始函数,设置推挽输出
void init()
{
	P0M0=0XFF;
	P0M1=0X00;
	P2M0=0X0F;
	P2M1=0X00;
	
  wei1=0;//初始数码管的显示为0-7
  wei2=1;
  wei3=2;
  wei4=3;
  wei5=4;
  wei6=5;
  wei7=6;
  wei8=7; 
	
	ucSeg7State = 0;
	ucCount = 0;  //初始化中断数为0;
	
	 led_sel=1;//二极管发光
	 P0=0x80;//第一个二极管亮

	
	  TMOD = 0x01;             //定时器0,方式1
    ET0 = 1;                  //开启定时器中断
   //这里总体就是设置定时器0的初始值是1ms
    TH0 = ( 65535 - 1000 ) / 256; //定时器0的高八位设置
    TL0 = ( 65535 - 1000 ) % 256; //定时器0的低八位设置
    TR0 = 1;                 //启动定时器
    EA = 1;                  //打开总的中断
}

/*---------定时器T0中断服务函数---------*/
void T0_Process() interrupt 1     //把数码管的显示提到中断里面来了
{
    TH0 = ( 65535 - 1000 ) / 256; //重新装载定时器0的初始值,为了下一次定时器溢出准备
    TL0 = ( 65535 - 1000 ) % 256;
    ucSeg7State++;         //这变量两个作用:具有下面分频作用,和扫描过程中显示第ucSeg7State个数码管的作用
    if( ucSeg7State == 8 )    //进行分频,每中断八次才让ucCount的值加一次
    {
        ucSeg7State = 0;
        ucCount++;
    }
    if( ucCount == 100 )     //考虑到扫描频率很高这里再次分频,ucCount加到100才执行,相当于800ms左右开始+1;
    {
        ucCount = 0;
        wei1++;     //让从左到右各个数码管上的数字都加一
        wei2++;
        wei3++;
        wei4++;
        wei5++;
        wei6++;
        wei7++;
        wei8++;
			  
    }
		
		//电话号码第一个数字出现,第一种情况
		if(3<(wei1%11))
			{
			if(ucCount>50)
				{
			  led_sel=1;//二极管发光
	      P0=uiLed;//第8个二极管亮
					}
				else{
					led_sel=0;
				  }	
		}
			//第二种情况
				if((wei1%11)==0)
				{
					if(ucCount>50)
				{
			  led_sel=1;//二极管发光
	      P0=uiLed;//第一个二极管亮
					}
				else{
					led_sel=0;
				  }
				}
					P0 = 0;  
	        P2 = weixuan[ucSeg7State];   //位选
    switch( ucSeg7State )           //每次中断显示一个数码管来显示
    {
        case 0:
            P0 = duanxuan[ wei1 % 11];
            break;//从左到右,第一个数码管显示
        case 1:
            P0 = duanxuan[ wei2% 11];
            break;//从左到右,第二个数码管显示
        case 2:
            P0 = duanxuan[ wei3% 11];
            break;//从左到右,第三个数码管显示
        case 3:
            P0 = duanxuan[ wei4 % 11];
            break;//从左到右,第四个数码管显示
        case 4:
            P0 = duanxuan[ wei5 % 11];
            break;//从左到右,第五个数码管显示
        case 5:
            P0 = duanxuan[ wei6 % 11];
            break;//从左到右,第六个数码管显示
        case 6:
            P0 = duanxuan[ wei7% 11];
            break;//从左到右,第七个数码管显示
        default:
            P0 = duanxuan[ wei8 % 11];
            break;//从左到右,第八个数码管显示
    } 
}


void main()
{
	init();
	while(1)
	{
	}

}

5.技巧
本项目主要是了解如何进行数码管与流水灯的结合,如果是普通实现类似功能的话,可以直接在段选的数组中设置特殊符号或者空格用来隔开开头与结尾。
比如设置段选数组里面最后两位为数码管不亮时的16进制数,利用小工具软件,可以参考
STC15系列单片机学习笔记——流水灯设计与数码管设计,里面带小工具下载链接

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:31:07  更:2021-08-29 09:33:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:36:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码