【C51】C51单片机实现的 抽奖机 设计与编程指南

news2024/10/6 2:25:36

文章目录

  • 前言:
  • 1. 实现效果
  • 2. 准备工作
  • 3. 编写代码
  • 总结:

前言:

在本文中,我们将介绍如何使用C51单片机来实现一个简单的抽奖机。这个项目不仅能够展示C51单片机的基本应用,还能让我们了解如何通过编程来控制硬件,实现有趣的交互功能。我们将从实现效果、准备工作、到编写代码,一步步引导读者完成整个抽奖机的制作流程。

1. 实现效果

https://live.csdn.net/v/397509

C51_抽奖机

2. 准备工作

  • 电路图:
    在这里插入图片描述

  • LCD12864需要动态库封装了他的驱动,要放到同一个文件中
    在这里插入图片描述

  • INT0是外部中断0,引脚号是p32
    在这里插入图片描述

  • 按钮与INT0 进行连接
    在这里插入图片描述

  • 添加12864的驱动代码
    在这里插入图片描述

在这里插入图片描述

  • 检查引脚对不对,P34-P37为控制口,P00-P07为数据口。
    在这里插入图片描述
    在这里插入图片描述

  • 测试12864显示屏能否正常运行

#include <config.h>	
#include <ST7920.h>

void main()
{
	ST7920_Init();//初始化函数
	ST7920_str("你好,湖文!",0,2);
	while(1) {
		
	}
}

在这里插入图片描述

  • 测试中断配置
#include <config.h>	
#include <ST7920.h>

void main()
{
	EX0 = 1; // 开外部中断0中断
	EA = 1; // 开中断总开关
	IT0 = 1; // IT1=0 时,为平电平触发,IT1=1,为跳变沿触发
	
	ST7920_Init();//初始化函数
	ST7920_str("你好,湖文!",0,2);
	while(1) {
		 
	}
}

void intx0() interrupt 0  // 方式0 外部中断
{
	ST7920_str("你好,花纹",0,2);
}

在这里插入图片描述

3. 编写代码

#include <config.h>	
#include <ST7920.h>
#include <stdlib.h>

bit flag = 0; // 表示是否按键

u8 prizes[][10]={"特等奖", "1等奖", "2等奖", "3等奖", "谢谢参与"};

u16 count = 0;

void main()
{
	u8 i = 0;
	u8 m = 0;
	
	EA = 1; // 开中断总开关
	EX0 = 1; // 开外部中断0中断
	IT0 = 1; // IT1=0 时,为平电平触发,IT1=1,为跳变沿触发
	
	// 0 号计数器 方式1
	TMOD = TMOD & 0xf0; 
	TMOD = TMOD | 0x01; 
	TH0 = 0x00; //  50ms@11.0592Mhz
	TL0 = 0x4c; 
	ET0 = 1; // 开定时器0中断
	TR0 = 1; // 启动定时器0
	ST7920_Init();//初始化函数
	ST7920_str("祝你好运!",0,2);
	
	while(1) {
		 if(flag == 1) {
				flag = 0;
				ST7920_Clear();
				ST7920_str("开始抽奖!",0,2);
				ST7920_str("3",1,4);
				delay_ms(500);
				ST7920_str("2",1,4);
			 	delay_ms(500);
				ST7920_str("1",1,4);
				delay_ms(500);
				
				srand(count); //生成随机数种子
			  for (i = 0; i < 20; ++i) {
					ST7920_Clear();
					m = rand() % 5;
					ST7920_str(prizes[m],1,3);
					delay_ms(100);
				}
				ST7920_Clear();
				ST7920_str("恭喜获得:",0,2);
				ST7920_str(prizes[m],1,3);
				delay_s(1);
				TR0 = 1; // 开启定时器T0
		}
	}
}

void intx0() interrupt 0  // 方式0 外部中断
{
	flag = 1;
	TR0 = 0; // 关闭定时器T0
}

void timer0() interrupt 1 // 方式1 定时器中断
{
	++count;
}

总结:

通过本文的指导,我们已经成功地构建了一个基于C51单片机的抽奖机。从电路图的准备,到LCD12864显示屏的驱动,再到中断和定时器的配置,我们逐步实现了抽奖机的核心功能。在编写代码部分,我们介绍了如何设置外部中断来响应按钮按下,如何使用定时器生成随机数,以及如何通过LCD显示屏展示抽奖结果。最终,我们得到了一个能够自动倒计时并随机显示奖项的抽奖机。这个项目不仅锻炼了我们的编程能力,也让我们对单片机的硬件控制有了更深入的理解。希望读者能够通过本文的学习,激发对电子制作和编程的兴趣,并在未来的电子项目中应用所学知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1806581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卡尔曼滤波器例子

卡尔曼滤波器 卡尔曼滤波器(Kalman Filter)是一种用于线性系统状态估计的递归算法,可以有效地融合传感器数据和系统模型来估计系统的状态。它在机器人学中广泛应用,尤其是位置和速度等状态的估计。通过卡尔曼滤波器,可以有效地估计机器人在二维平面内的真实位置,并减小测…

探地雷达正演模拟,基于时域有限差分方法,一

声明&#xff1a;本博客中的公式均是在Word中使用AxMath写好后截图使用的&#xff0c;欢迎引用&#xff0c;但请标注来源。 本系列会有四篇博客&#xff1a; 第一篇内容&#xff1a; 1、基础知识掌握 2、Maxwell方法差分求解原理 第二篇内容&#xff1a; 1、基于C的TE波波…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:大疆RoboMaster AI挑战赛

NVIDIA Jetson TX2助力机器人战队斩获RoboMaster AI挑战赛冠亚军 一个汇聚数百万机器人专家与研究人员的赛场&#xff0c;一场兼具工程、策略和团队挑战的较量&#xff0c;说的正是近日刚刚在澳大利亚布里斯本ICRA大会上闭幕的大疆RoboMaster AI挑战赛今年的冠军I Hiter以及亚军…

Macbook M芯片Maven的安装与配置

Macbook M芯片Maven的安装与配置 下载 搜索Maven 进入网站 https://maven.apache.org/download.cgi 点击Download 点击如下链接进行下载&#xff1b; 将下载好的文件放到你的指定位置 双击进行解压 配置环境变量 进入终端 在终端中输入 open ~/.bash_profile输入以下内…

UI学习(二)

UI学习&#xff08;二&#xff09; 文章目录 UI学习&#xff08;二&#xff09;布局子视图手动布局自动布局 导航控制器导航控制器基础导航控制器的切换导航栏工具栏 分栏控制器分栏控制器协议部分的内容UITableView基础部分相关的协议函数高级协议与单元格 多界面传值 布局子视…

csdn上传图片失败解决办法

今天下午写笔记&#xff0c;上传图片的时候总是出现图片上传不成功。查询了下解决方案&#xff1a; C:\Windows\System32\drivers\etc &#xff0c;使用管理员打开hosts文件加入&#xff1a; 49.7.22.7 csdn-img-blog.oss-cn-beijing.aliyuncs.com保存之后&#xff0c;&#x…

【JavaEE】Spring IoCDI详解

一.基本概念 1.Ioc基本概念 Ioc: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器. 什么是控制反转呢? 也就是控制权反转. 什么的控制权发发了反转? 获得依赖对象的过程被反转了也就是说, 当需要某个对象时, 传统开发模式中需要自己通…

中国宠业新锐品牌展,2024苏州国际宠物展6月28日开展!

中国宠业新锐品牌展&#xff0c;2024苏州国际宠物展6月28日开展&#xff01; ​ 第2届华东国际宠物用品展览会(苏州)暨中国宠业新锐品牌展&#xff0c;将于6月28日-30日在苏州国际博览中心盛大举办&#xff0c;锁定年中市场黄金档期&#xff0c;同期以“NB展&#xff0c;更新鲜…

Letcode-Top 100二叉树专题

94. 二叉树的中序遍历 方法一&#xff1a;递归法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeN…

2024.6.9 四

Python的异常处理 在python里,错误和异常是不同的概念 错误: Python 的语法错误或者称之为解析错,大多是因为写代码写错了出现的 异常: 即便 Python 程序的语法是正确的&#xff0c;在运行它的时候&#xff0c;也有可能发生错误。运行期检测到的错误被称为异常。 大多数的异常…

详解大厂实时数仓建设V4.0

一、实时数仓建设背景 1. 实时需求日趋迫切 目前各大公司的产品需求和内部决策对于数据实时性的要求越来越迫切&#xff0c;需要实时数仓的能力来赋能。传统离线数仓的数据时效性是 T1&#xff0c;调度频率以天为单位&#xff0c;无法支撑实时场景的数据需求。即使能将调度频…

【Spring Boot】异常处理

异常处理 1.认识异常处理1.1 异常处理的必要性1.2 异常的分类1.3 如何处理异常1.3.1 捕获异常1.3.2 抛出异常1.3.4 自定义异常 1.4 Spring Boot 默认的异常处理 2.使用控制器通知3.自定义错误处理控制器3.1 自定义一个错误的处理控制器3.2 自定义业务异常类3.2.1 自定义异常类3…

【小沐学Python】Python实现Web服务器(CentOS下打包Flask)

文章目录 1、简介2、下载Python3、编译Python4、安装PyInstaller5、打包PyInstaller6、相关问题6.1 ImportError: urllib3 v2 only supports OpenSSL 1.1.1, currently the ssl module is compiled with OpenSSL 1.0.2k-fips 26 Jan 2017. See: https://github.com/urllib3/url…

seerfar选品功能,OZON运营插件工具seerfar

在当今这个数字化、信息化的时代&#xff0c;电子商务的飞速发展使得越来越多的商家开始关注如何更高效地运营自己的在线店铺。其中&#xff0c;选品作为电商运营的重要一环&#xff0c;直接影响着店铺的流量、转化率和利润。在OZON这样的电商平台上&#xff0c;如何快速、准确…

Incredibuild for Mac 来了!

Mac 开发者在寻找适合自己需求的工具时可能会遇到一些困难&#xff0c;因为 Mac 操作系统相对封闭&#xff0c;不像其他系统那样开放和灵活。尽管如此&#xff0c;Mac 开发者在开发应用程序时的需求&#xff08;比如功能、效率等&#xff09;和使用其他操作系统的开发者是类似的…

联合体和枚举<C语言>

导言 在C语言中除了结构体外&#xff0c;联合体和枚举也是自定义类型&#xff0c;联合体主要用于节省空间&#xff0c;在同一块内存存储多种类型的数据&#xff0c;而枚举可以提高代码的可读性、可维护性。 联合体&#xff08;union&#xff09; 它还有个更容易理解的名字&…

Triton学习笔记

b站链接&#xff1a;合集Triton 从入门到精通 文章目录 算法名词解释&#xff1a;scheduler 任务调度器model instance、inference和requestbatching 一、Triton Inference Server原理1. Overview of Trition2. Design Basics of Trition3. Auxiliary Features of Trition4. A…

C语言:定义和使用结构体变量

定义和使用结构体变量 介绍基础用法1.定义结构体2. 声明结构体变量3. 初始化和访问结构体成员4. 使用指针访问结构体成员5. 使用结构体数组 高级用法6. 嵌套结构体7. 匿名结构体8. 结构体和动态内存分配9. 结构体作为函数参数按值传递按引用传递 介绍 在C语言中&#xff0c;结…

找出链表倒数第k个元素-链表题

LCR 140. 训练计划 II - 力扣&#xff08;LeetCode&#xff09; 快慢指针。快指针臂慢指针快cnt个元素到最后&#xff1b; class Solution { public:ListNode* trainingPlan(ListNode* head, int cnt) {struct ListNode* quick head;struct ListNode* slow head;for(int i …

抓住时机的核心:坚持学习准备着

在这个快节奏的时代&#xff0c;时间对于每个人来说都是宝贵的。能否在合适的时间做正确的事情&#xff0c;往往决定了我们成功的概率。但同时&#xff0c;我们也要认识到&#xff0c;逆风翻盘虽少&#xff0c;却并非不可能。在这个过程中&#xff0c;投资自己&#xff0c;投资…