deepseek能編寫程序已經不是新聞,但是我頭一次使用,想著看能不能按照我的要求寫個程序出來。翻出一個共陽的1.8寸數(shù)碼管;理清一下思路,好讓deepseek讀懂要干什么活。點亮數(shù)碼管無非就是按照數(shù)字的筆畫順序點燈。所以簡單畫個圖看下。
電路圖.jpg (64.89 KB, 下載次數(shù): 0)
下載附件
2026-1-25 22:11 上傳
使用的STC12C5A60S2的單片機,接線方式如圖,晶振部分沒有畫出來。
然后打開DEEPSEEK;輸入想法:
編寫一段程序,用STC12C5A60S2單片機的P1口點亮一個數(shù)碼管,從數(shù)字0顯示到數(shù)字9,每個數(shù)字亮1S;循環(huán)先顯示。數(shù)碼管為共陽,a,b,c,d,e,f,e,g,dp分別對應單片機的p1.0...p1.7;回車后網頁顯示:以下是使用STC12C5A60S2單片機P1口控制共陽數(shù)碼管顯示0-9的循環(huán)程序,每個數(shù)字顯示1秒:
#include <STC12C5A60S2.H> // 包含STC12C5A60S2頭文件
#include <intrins.h> // 包含_nop_()函數(shù)
// 定義數(shù)碼管段碼(共陽,P1.0對應a段,P1.7對應dp段)
// 數(shù)字0-9的段碼表:a,b,c,d,e,f,g,dp
unsigned char code LED_Code[] = {
0xC0, // 0: 1100 0000 (a,b,c,d,e,f亮)
0xF9, // 1: 1111 1001 (b,c亮)
0xA4, // 2: 1010 0100 (a,b,g,e,d亮)
0xB0, // 3: 1011 0000 (a,b,g,c,d亮)
0x99, // 4: 1001 1001 (f,g,b,c亮)
0x92, // 5: 1001 0010 (a,f,g,c,d亮)
0x82, // 6: 1000 0010 (a,f,e,d,c,g亮)
0xF8, // 7: 1111 1000 (a,b,c亮)
0x80, // 8: 1000 0000 (全部亮)
0x90, // 9: 1001 0000 (a,b,c,d,f,g亮)
0x7F // 點: 0111 1111 (僅dp亮,可用于分隔)
};
// 延時函數(shù)聲明
void Delay1ms(unsigned int count);
void Delay1s(void);
// 主函數(shù)
void main(void)
{
unsigned char i = 0; // 用于計數(shù)0-9
// 初始化P1口為推挽輸出模式
P1M0 = 0xFF; // P1口全部設置為推挽輸出
P1M1 = 0x00;
while(1) // 無限循環(huán)
{
for(i = 0; i < 10; i++) // 循環(huán)顯示0-9
{
P1 = LED_Code[ i]; // 將段碼送到P1口
Delay1s(); // 延時1秒
}
}
}
// 1毫秒延時函數(shù)(基于11.0592MHz晶振)
void Delay1ms(unsigned int count)
{
unsigned int i, j;
for(i = 0; i < count; i++)
for(j = 0; j < 114; j++);
}
// 1秒延時函數(shù)
void Delay1s(void)
{
Delay1ms(1000); // 延時1000ms = 1s
}
程序說明:1. 段碼定義:? 共陽數(shù)碼管:段選信號為0時點亮,1時熄滅? P1.0對應a段,P1.1對應b段,...,P1.7對應dp段? 段碼表按照0-9的順序定義,每個字節(jié)的8位對應8個段2. 端口配置:? P1M0 = 0xFF; 和 P1M1 = 0x00; 將P1口設置為推挽輸出模式? 推挽輸出可以提供較強的驅動能力,直接驅動數(shù)碼管3. 顯示邏輯:? 主循環(huán)中,for循環(huán)依次取0-9的段碼? 每個數(shù)字通過P1口輸出,保持1秒? 顯示完9后回到0重新開始如果需要更精確的延時,可以使用定時器:
16f55702-328f-4d23-acc1-ce1930890801.png (148.58 KB, 下載次數(shù): 0)
下載附件
2026-1-25 22:19 上傳
把程序編譯成HEX文件燒錄后,運行正常,變化速度稍快,修改下延遲時間后OK;
|