3線實現2路12位數碼管顯示不同值(STM32暫存器版本)
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "dis.h"
unsigned char duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xBF};
//0 1 2 3 4 5 6 7 8 9 負號
unsigned char wei[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF};
int main(void)
{
unsigned char point,d[6];
unsigned char d1[6];
u16 p=999999;
u32 temp_1;
u8 x,y,n,i,j;
Stm32_Clock_Init(9); //系統時鐘設定
delay_init(72);
DIS_Init();
while(1)
{
d[0]=2;
d[1]=10;
d[2]=temp_1%10;
d[3]=(temp_1/10)%10;
d[4]=(temp_1/100)%10;
d[5]=(temp_1/1000)%10;
d[4]=(temp_1/10000)%10;
d[5]=(temp_1/100000)%10;
p--;
d1[0]=p%10;
d1[1]=(p/10)%10;
d1[2]=(p/100)%10;
d1[3]=(p/1000)%10;
d1[4]=(p/10000)%10;
d1[5]=(p/100000)%10;
for(i=0;i<10;i++)
{
//每組2個關閉語句 顯示第一組0個關閉語句 第二組2個 三組4個
for(n=0;n<6;n++)//位迴圈 第n位
{
x=d[n]; //第一路 第n段碼
DIS_IN(wei[n]); //先傳位碼
if(n==5) //小數點所在位 實現新增小數點位置
{point= (duan[x]&0x7F);
DIS_IN(point);
}
else DIS_IN(duan[x]); //再傳段碼
y=d1[n]; //第二路 第n段碼
DIS_IN(wei[n]); //先傳位碼
if(n==2) //小數點所在位 實現新增小數點位置
{point= (duan[y]&0x7F);
DIS_IN(point);
}
else DIS_IN(duan[y]); //再傳段碼
DIS_OUT();
delay_us(500);
}
if(i==999999)
i=0;
if(p==0)
p=999999;
}
}
}
#include <stm32f10x_lib.h>
#include "dis.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
//數碼管輸出埠初始化
//初始化PA8和PD2為輸出口.並使能這兩個口的時鐘
// IO初始化
void DIS_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA時鐘
GPIOA->CRL&=0XFF0FFFFF;
GPIOA->CRL|=0X00300000;//PA.5 推輓輸出
GPIOA->ODR|=1<<5; //PA.5輸出高
GPIOA->CRL&=0XF0FFFFFF;
GPIOA->CRL|=0X03000000;//PA.6推輓輸出
GPIOA->ODR|=1<<6; //PA.6輸出高
GPIOA->CRL&=0X0FFFFFFF;
GPIOA->CRL|=0X30000000;//PA.7推輓輸出
GPIOA->ODR|=1<<7; //PA.7輸出高
}
/*---------------序列資料輸入-----------------------------*/
void DIS_IN(unsigned char Data)
{
u8 j,m;
for(j = 0;j < 8; j++) //迴圈8次,剛好移完8位
{
SCL1 = 0; //先將移位暫存器控制引腳置為低
if((Data & 0x80)==0x80) SDA1=1;
else SDA1=0;
Data<<=1; //將資料的次高位移到最高位
SCL1 = 1; //再置為高,產生移位時鐘上升沿,上升沿時資料暫存器的資料移位
for(m=0;m<2;m++){};//短延時,去掉後會出錯
SCL1 = 0;
}
}
/*----------------並行資料輸出----------------------------*/
void DIS_OUT(void)
{
u8 m;
SCL2 = 0; //先將儲存暫存器引腳置為低
SCL2 = 1; //再置為高,產生移位時鐘上升沿,上升沿時移位暫存器的資料進入資料儲存暫存器,更新顯示資料。
for(m=0;m<2;m++){};
SCL2 = 0;
}
/*---------------------------------------------*/
#ifndef __DIS_H
#define __DIS_H
#include "sys.h"
//SHUMA驅動程式碼
//LED埠定義
#define SDA1 PAout(5)// PA5
#define SCL1 PAout(6)// PA6
#define SCL2 PAout(7)// PA7
void DIS_Init(void);//初始化
void DIS_IN( unsigned char Data);
void DIS_OUT(void);
#endif
#ifndef __DIS_H
#define __DIS_H
#include "sys.h"
//SHUMA驅動程式碼
//LED埠定義
#define SDA1 PAout(5)// PA5
#define SCL1 PAout(6)// PA6
#define SCL2 PAout(7)// PA7
void DIS_Init(void);//初始化
void DIS_IN( unsigned char Data);
void DIS_OUT(void);
#endif
相關推薦
3線實現2路12位數碼管顯示不同值(STM32暫存器版本)
#include <stm32f10x_lib.h> #include "sys.h" #include "usart.h" #include "delay.h" #include "dis.h" unsi
基於proteus的51微控制器模擬例項六十、8位數碼管顯示例項
1、本例實現在8位數碼管上同時顯示多個不同字元。 2、本例使用了8只整合式7段共陽數碼管(pruteus中元件標識為7seg-mpx8-ca-blu,共陽為ca,共陰為cc),所有8個數碼管的段碼引腳a,b,c,d,e,f,g,dp都是分別並聯在一起,任何時候傳送的段碼
基於proteus的51微控制器模擬例項五十九、1位數碼管顯示例項
1、數碼管實際上是由7個發光二極體組成一個8字形,另外一個發光二極體做成圓點型,這樣就構成了一個數碼管。所有的8個二級管的正極或者負極都連到一個公共端點上,對於公共端連在正極的數碼管,稱為共陽極數碼管,反之稱為共陰極數碼管。 根據數碼管的內部結構原理,可以很清楚的知道數
[Python 3.X]python練習筆記[2]-----用python實現七段數碼管顯示年月日
#SevenDigitsDrawV2.py import turtle import time def drawGap(i):#繪製數碼管間隔 turtle.penup() turtle.fd(i) def drawLine(line): #繪製單段數碼管 drawGap
《ServerSuperIO Designer IDE使用教程》-3.Modbus協議,讀取多個暫存器,實現多種資料型別解析。釋出:v4.2.2版本
更新內容,v4.2.2版本:1.增加Modbus協議讀取多個暫存器,並且按多種資料型別解析資料。2.Modbus Serial和Modbus TCP兩個驅動合併成一個驅動。3.修改資料庫結構,儲存配置資訊。4.優化ServerSuperIO核心程式碼,應用過程中的潛在問題。 v4.2.2 下載地址:官方
自己動手實現智慧家居之溫溼度數碼管展示(四位共陽數碼管)
【前言】 一個熱愛技術的人一定向往有一個科技感十足的環境吧,那何不親自實踐一下屬於技術人的座右銘:“技術改變世界”。 就讓我們一步步動手搭建一個屬於自己的“智慧家居平臺”吧(不要對這個名詞抬槓啦,技術在手,怎麼設計實現因人而異),本文只做拋磚引玉,各路大神如果有更好的想法可以各顯神通,當然能在評論區留下更好
數碼管顯示從1開始計數三位(51單片機)
數碼管 pla mod ++ time play ble -- == #include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuc
基於ROS使用Arduino控制四位數碼管
1. 硬體 Arduino控制板:1個; 數碼管:1個; 杜邦線:若干; 1.1 接線方式 參考如下: a = 1; tb = 2; c = 3;d = 4; e = 5; f = 6; g = 7; dp = 8; 注意:上面的這些都需要串聯電阻
例程16 四位數碼管
這次我們進行的實驗是使用arduino驅動一塊共陰四位數碼管。實驗的目的是:第一位顯示1,第二位顯示2,第三位顯示3,第四位顯示4,每次只顯示一位,顯示間隔0.5秒。 我們開始準備實驗用元器件: 四位數碼管*1 220Ω直插電阻*8 麵包板*1 麵包板跳線*1
Arduino實驗之兩位數碼管實驗報告
第一種方案 從1-12引腳分別如圖所示這樣接 下面五個腳從左到右分別是1 2 3 4 5,上面六個腳從右到左分別是7 8 9 10 11 12,13是LED燈 實現方案一:將數碼管從1變成99 兩位數字相同時會使得LED燈亮 #define open(num) di
(OK) Android Studio 3.2 中建立新的AVD時,出現錯誤(No space left on device)—— on Fedora 27
To install:- Google APIs Intel x86 Atom System Image (system-images;android-27;google_apis;x86)Preparing "Install Google APIs Intel x86 At
基於proteus的51微控制器模擬例項七十九、8位數碼管驅動晶片max7221應用例項
1、MAX7221是整合式共陰極數碼管驅動晶片。可以用來驅動8位7段式數碼管,也可以驅動條形LED或者8*8LED點陣 微控制器僅僅需要3個IO口就可以控制MAX7221驅動8位數碼管。注意這裡的
51微控制器:8位數碼管動態顯示,從12345678開始,每次按S1鍵加1
原始碼 #include <reg52.h> #include <stdlib.h> #define uint unsigned long #define uchar unsigned char sbit
proteus模擬之8位數碼管動態掃描顯示試驗
/*Proteus 模擬之8位共陰數碼管動態掃描實驗*/ 程式: /*Proteus 模擬之8位共陰數碼管動態掃描實驗*/ #include<reg52.h> #define SegPort P0 //定義數碼管連線埠 sbit LE_Duan = P
組合語言計算2^12儲存在AX暫存器,並以十進位制形式輸出
一、計算2^12儲存在AX中(王爽組合語言第二版p100): mov cx,12 ;迴圈12次 mov
單片機入門-矩陣鍵盤控制數碼管顯示
矩陣 right 控制 入門 i/o num .cn mar oid 任務簡述:通過按下4X4矩陣鍵盤實現數碼管對應顯示數字 實現方式:通過行列分接法,可以節省使用單片機的I/O口,掃描矩陣鍵盤是否有按下,判斷P2端口得到的值。 protues 硬件系統 單片機晶振復位電
串口通信數碼管顯示輸入數字
重載 輸入 十六進制 十六 main 終端 def config oid #include <reg52.h> sbit ADDR0=P1^0;sbit ADDR1=P1^1;sbit ADDR2=P1^2;sbit ADDR3=P1^3;sbit ENLED=
jQuery 價格顯示 前面位數與後面兩位顯示不同樣式(一大一小)
20px his 分享 highlight img oct es2017 size rip <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">
Python繪制數碼管顯示當前時間
Python利用Python中的turtle圖形庫繪制七段數碼管,顯示當前時間 代碼 # coding:utf-8 # 繪制七段數碼管,顯示當前時間 import time import turtle as tt # 繪制間隔 def drawGap(): tt.penup() tt.f
Apach實現創建虛擬目錄以及用戶訪問控制(內附源碼包)
direct min selinux httpd服務 follow virt 涵蓋 掛載 域名 簡介 基於用戶的訪問控制就是對網頁目錄進行認證配置,用戶輸入用戶名密碼之後才能訪問網頁 認證方式 httpd服務器支持使用摘要認證(Digest)和基本認證(Basic)兩種方式