1. 程式人生 > >3線實現2路12位數碼管顯示不同值(STM32暫存器版本)

3線實現2路12位數碼管顯示不同值(STM32暫存器版本)

#include <stm32f10x_lib.h>
#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實現212數碼顯示不同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)兩種方式