博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(单片机作业一)STC89C52动态数码管显示520
阅读量:3950 次
发布时间:2019-05-24

本文共 3172 字,大约阅读时间需要 10 分钟。

设计背景

单片机老师要求在520当天,利用手上的单片机,实现一个专属计算机专业的浪漫。

设计基础目的

动态数码管显示520

模块使用

8位动态数码管、8*8led点阵、独立按键

辅助工具

Keil C51编程软件、烧写软件(STC-ISP-15xx)、取字模软件

功能演示

stc89c52做个基础表白

代码实现

#include
#include
typedef unsigned int u16; //对数据类型进行声明定义typedef unsigned char u8;sbit SRCLK=P3^6;sbit RCLK=P3^5;sbit SER=P3^4;sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit k1=P3^1; //定义P31口是k1sbit k4=P3^3;u8 ledduan1[]={
0xC0,0x9C,0x22,0x32,0x0B,0x32,0x22,0x1C,};u8 ledduan2[]={
0x97,0xB5,0xD2,0x90,0x07,0xA8,0x47,0xA8,}; u8 ledduan3[]={
0xE8,0xA8,0xB8,0x07,0x07,0xB8,0xA8,0xE8,};u8 ledwei[]={
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};u8 code smgduan[18]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0xff};//显示0~F的值/******************************************************************************** 函 数 名 : delay* 函数功能 : 延时函数,i=1时,大约延时10us*******************************************************************************/void delay(u16 i){
while(i--); }/******************************************************************************** 函 数 名 : DigDisplay* 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示*******************************************************************************/void DigDisplay(int t1,int t2){
u8 g[8]; u8 p; u8 i; for(p=3;p>0;p--) {
g[p]=t1%10; t1=t1/10; } g[4]=16; for(p=7;p>=5;p--) {
g[p]=t2%10; t2=t2/10; } for(i=0;i<9;i++) {
switch(i) //位选,选择点亮的数码管, {
case(0): LSA=1;LSB=1;LSC=1; break;//显示第0位 case(1): LSA=0;LSB=1;LSC=1; break;//显示第1位 case(2): LSA=1;LSB=0;LSC=1; break;//显示第2位 case(3): LSA=0;LSB=0;LSC=1; break;//显示第3位 case(4): LSA=1;LSB=1;LSC=0; break;//显示第4位 case(5): LSA=0;LSB=1;LSC=0; break;//显示第5位 case(6): LSA=1;LSB=0;LSC=0; break;//显示第6位 case(7): LSA=0;LSB=0;LSC=0; break;//显示第7位 case(8): LSA=1;LSB=1;LSC=1; break;//显示第7位,将点阵屏影响放到第一位数码管 } P0=smgduan[g[i]];//发送段码 delay(100); //间隔一段时间扫描 P0=0x00;//消隐 }} void Hc595SendByte(u8 dat){
u8 a; SRCLK=0; RCLK=0; for(a=0;a<8;a++) {
SER=dat>>7; dat<<=1; SRCLK=1; _nop_(); _nop_(); SRCLK=0; } RCLK=1; _nop_(); _nop_(); RCLK=0;}int keypros(){
if(k1==0) //检测按键K1是否按下 {
return 3; } if(k4==0) //检测按键K4是否按下 {
return 5; } return 0; }/******************************************************************************** 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*******************************************************************************/void main(){
u8 i; u8 get; while(1) {
P0=0x7f; get=keypros(); if(get==3) {
for(i=0;i<8;i++) {
P0=ledwei[i]; //位选 Hc595SendByte(ledduan1[i]); //发送段选数据 delay(100); //延时 Hc595SendByte(0x00); //消隐 } } else if(get==5) {
for(i=0;i<8;i++) {
P0=ledwei[i]; //位选 Hc595SendByte(ledduan2[i]); //发送段选数据 delay(100); //延时 Hc595SendByte(0x00); //消隐 } } else if(get==0) {
for(i=0;i<8;i++) {
P0=ledwei[i]; //位选 Hc595SendByte(ledduan3[i]); //发送段选数据 delay(100); //延时 Hc595SendByte(0x00); //消隐 } } DigDisplay(520,521); //数码管显示函数 } }

小白一名,如有错误,请及时告知,谢谢

转载地址:http://porwi.baihongyu.com/

你可能感兴趣的文章
Android的Gradle技巧 2.2将应用程序从Eclipse ADT移植到Android Studio
查看>>
Android的Gradle技巧 2.3从Eclipse移植应用程序ADT使用Eclipse
查看>>
昂山素季 Aung San Suu Kyi
查看>>
AI 人工智能第一课 从贝叶斯定理开始
查看>>
朴素贝叶斯python实现
查看>>
Logistic回归原理及公式推导
查看>>
并发性与并行性 并发性与并行性
查看>>
惰性求值,可组合和模块化的JavaScript
查看>>
How to Extend Django User Model 如何扩展Django用户模型
查看>>
两个行业的故事:编程语言与富裕国家和发展中国家之间的差异
查看>>
15个用于管理MySQL服务器mysqladmin命令
查看>>
服务器端I / O性能:Node,PHP,Java与Go
查看>>
多行文本编辑时,同一行编辑不同类型的字符时自动换行的问题
查看>>
如何使开机动画只播一次
查看>>
如何在平台上实现LED灯的效果?如信号灯,来短信/来电时LED动画闪烁
查看>>
restore factory属性的enable和disable
查看>>
Android LOG机制流程图
查看>>
如何在JNI中抛异常
查看>>
Android应用程序的完全退出
查看>>
Task和Activity相关的一些属性
查看>>